RecycleView не извлекает данные из Google Firestore

#android #firebase #kotlin #google-cloud-firestore #google-cloud-functions

#Android #firebase #kotlin #google-облако-firestore #google-cloud-функции

Вопрос:

Мне нужна помощь RecycleView в Kotlin. У меня подключен мой Google Firestore, и все мои операции CRUD работают. Теперь я хочу просмотреть созданные фильмы Titles , которые я добавляю в Firebase, но RecycleView они не показывают мне ничего из моих данных Firestore.

NewestTitlesFragment:

 package com.example.watchlist.sampledata

class NewestTitlesFragment : Fragment() {

    private val auth = FirebaseAuth.getInstance()
    private val currentUser = auth.currentUser
    private val db:FirebaseFirestore = FirebaseFirestore.getInstance()
    private val collectionReference:CollectionReference = db.collection("users").document(currentUser!!.uid).collection("titles")

    var titleAdapter: TitleAdapter? = null

    lateinit var binding: FragmentNewestTitlesBinding

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ) =FragmentNewestTitlesBinding.inflate(inflater, container, false).run {
        binding = this
        val query : Query = collectionReference
        val firestoreRecyclerOptions: FirestoreRecyclerOptions<Watch> = FirestoreRecyclerOptions.Builder<Watch>()
            .setQuery(query, Watch::class.java)
            .build()

        titleAdapter = TitleAdapter(firestoreRecyclerOptions)
        newestTitlesRecycleView.layoutManager = LinearLayoutManager(context)
        newestTitlesRecycleView.adapter = titleAdapter

        root
    }

}

 

TitleAdapter:

     package com.example.watchlist
    
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.ImageView
    import android.widget.TextView
    import androidx.recyclerview.widget.RecyclerView
    import com.firebase.ui.firestore.FirestoreRecyclerAdapter
    import com.firebase.ui.firestore.FirestoreRecyclerOptions
    
    
    class TitleAdapter(options: FirestoreRecyclerOptions<Watch>) :
        FirestoreRecyclerAdapter<Watch, TitleAdapter.TitleAdapterVH>(options) {
        
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TitleAdapterVH {
            return TitleAdapterVH(LayoutInflater.from(parent.context).inflate(R.layout.titles_layout, parent, false))
        }
    
        override fun onBindViewHolder(holder: TitleAdapterVH, position: Int, model: Watch) {
    
            holder.movieTitle.text = model.title
    
        }
    
        class TitleAdapterVH(itemView: View) : RecyclerView.ViewHolder(itemView) {
    
            var movieTitle = itemView.findViewById<TextView>(R.id.movieTitle)
            var moviePoster = itemView.findViewById<ImageView>(R.id.titlePoster)
        }
    }
 

Смотреть:

     package com.example.watchlist
    
    import android.net.Uri
    
    data class Watch(
        val id : Int,
        var title :String ,
        var content:String,
        var date:String,
        var img:String ,
        )
 

titles_layout.xml:

     <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <ImageView
                android:id="@ id/titlePoster"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                tools:srcCompat="@tools:sample/avatars" />
    
            <TextView
                android:id="@ id/movieTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="20dp"
                android:text="TextView"
                android:textStyle="bold" />
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>

 

fragment_newest_titles.xml:

     <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FAF7F7"
        tools:context=".sampledata.NewestTitlesFragment">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <ImageView
                android:id="@ id/imageView5"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:layout_alignBottom="@id/newestTitlesRecycleView"
                android:background="#000000"
                app:srcCompat="@drawable/watchlist_logo" />
    
            <TextView
                android:id="@ id/textView3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#FF0000"
                android:gravity="center"
                android:text="Newest Titles"
                android:textColor="#FFFFFF"
                android:textIsSelectable="false"
                android:textSize="24sp"
                android:textStyle="bold" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="bottom"
                android:orientation="horizontal">
    
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@ id/newestTitlesRecycleView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#8A8A8A"
                    android:numColumns="2"
                    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
            </LinearLayout>
    
        </LinearLayout>
    
    </androidx.constraintlayout.widget.ConstraintLayout>

 

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос и добавьте свою структуру базы данных в качестве скриншота.

2. Измените эту строку holder.movieTitle.text = model.title на holder.movieTitle.text = model.get(position).title

3. это не помогло, я изменил holder.movieTitle.text = model.title на holder.movieTitle.text = model.get(position).title и это не помогло.

Ответ №1:

Эти типы проблем может быть трудно диагностировать без понимания используемой среды. Лучше тестировать локально, насколько это возможно, и просматривать все журналы ошибок, созданные в процессе развертывания.

Есть несколько отличных инструментов для локального тестирования вашего кода Firebase. Если вы будете выполнять модульное тестирование своего кода постепенно и интерактивно из локальной оболочки, вы быстро определите любые проблемы.

Вы также можете использовать эмулятор Firebase для создания прототипов, разработки и тестирования вашего кода перед его переносом в производство.