Он работает с одним фрагментом, но не с другим, и я не понимаю, почему я не могу получить разрешения ?!
Изображения хранятся в базе данных комнаты.
Я уже проверил свои сообщения журнала и image-uri(содержание) и контекст один и тот же в обоих фрагментах, но один получает разрешение, а другой нет...
Это сообщение об ошибке, которое я получаю
Код: Выделить всё
2025-01-06 20:55:51.266 7954-7954 Glide com.example.travelfriends D Loading image from URI: content://media/external/images/media/1000000032
2025-01-06 20:55:51.266 7954-7954 Glide com.example.travelfriends D Context available: com.example.travelfriends.ui.MainActivity@9085568
2025-01-06 20:55:51.312 7954-7999 GlideExecutor com.example.travelfriends E Request threw uncaught throwable
java.lang.SecurityException: com.example.travelfriends has no access to content://media/external/images/media/1000000032
Код: Выделить всё
Код: Выделить всё
package com.example.travelfriends.data
import android.net.Uri
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.travelfriends.R
class BookAdapter(
private val books: List,
private val onBookClick: (Book) -> Unit
) : RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_book, parent, false)
return BookViewHolder(view)
}
override fun onBindViewHolder(holder: BookViewHolder, position: Int) {
val book = books[position]
holder.bookTitle.text = book.name
holder.bookDescription.text = book.description
Log.d("Glide", "Context available: ${holder.itemView.context}")
Log.d("Glide", "Loading image from URI: ${book.image}")
// Verwende Glide, um das Bild zu laden
Glide.with(holder.itemView.context)
.load(Uri.parse(book.image))
.placeholder(R.drawable.ic_launcher_foreground)
.error(R.drawable.ic_launcher_foreground)
.into(holder.bookImage)
holder.itemView.setOnClickListener {
onBookClick(book)
}
}
override fun getItemCount(): Int {
return books.size
}
// ViewHolder für jedes Buch
class BookViewHolder(view: android.view.View) : RecyclerView.ViewHolder(view) {
val bookTitle: TextView = view.findViewById(R.id.tvRecViewBookTitle)
val bookDescription: TextView = view.findViewById(R.id.tvRecViewBookDescription)
val bookImage: ImageView = view.findViewById(R.id.ivRecViewBookImage)
}
}
Код: Выделить всё
package com.example.travelfriends.ui.fragments
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.bumptech.glide.Glide
import com.example.travelfriends.R
import com.example.travelfriends.data.AppViewModel
import com.example.travelfriends.data.Entry
class BookDisplayFragment : Fragment() {
private lateinit var ivBookImage: ImageView
private lateinit var tvBookTitle: TextView
private lateinit var appViewModel: AppViewModel
private var bookId: Int = -1
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_book_display, container, false)
ivBookImage = view.findViewById(R.id.bookImage)
tvBookTitle = view.findViewById(R.id.bookTitle)
val btnNextEntry: Button = view.findViewById(R.id.nextEntryButton)
appViewModel = ViewModelProvider(requireActivity())[AppViewModel::class.java]
// Abrufen der übergebenen Argumente
arguments?.let {
bookId = it.getInt("bookId", -1)
}
if (bookId != -1) {
appViewModel.getBookById(bookId)
observeBookData()
}
return view
}
private fun observeBookData() {
appViewModel.allBooks.observe(viewLifecycleOwner, Observer { books ->
if (books.isNotEmpty()) {
val book = books[0]
tvBookTitle.text = book.name
Log.d("Glide", "Loading image from URI: ${book.image}")
Log.d("Glide", "Context available: ${requireContext()}")
Glide.with(requireContext())
.load(book.image)
.placeholder(R.drawable.ic_launcher_foreground)
.error(R.drawable.ic_launcher_foreground)
.into(ivBookImage)
}
})
}
}
Но я не смог найти ответа, сообщения журнала тоже мне не помогло.
Я студент и не самый опытный программист, поэтому, пожалуйста, будьте вежливы.
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... al-storage