#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 для создания прототипов, разработки и тестирования вашего кода перед его переносом в производство.