# #android #firebase #android-studio #kotlin #firebase-realtime-database
Вопрос:
Я новичок в firebase и хочу внедрить определенные значения из базы данных firebase в режиме реального времени в свой переработчик-представление, в котором есть изображение с библиотекой «Glide» и текстовое представление с заголовком и кнопкой со ссылкой на amazon. Я попробовал несколько ответов из разных вопросов StackOverflow, но ни один из них, похоже, не работает со мной.
вот мои данные в реальном времени
- Я хочу связать product_image с представлением изображения с помощью Glide
- Я хочу связать product_title с текстовым представлением
- Я хочу связать amazon с кнопкой
Вот мой класс данных
data class affiliateRvModel(val affiliate_title : String = "",
val affiliate_image : String = "",
val affiliate_desc: String = "",
val affiliate_amazon_link: String = ""){
}
Вот мой вид рециркулятора
class AffiliateRVadapter(val context: Context, val AFFILIATE_LIST : ArrayList<affiliateRvModel>) :
RecyclerView.Adapter<AffiliateRVadapter.ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): AffiliateRVadapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.affiliate_rv_layout, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return AFFILIATE_LIST.size
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val affiliate_list : affiliateRvModel = AFFILIATE_LIST[position]
holder.affiliate_title.text = affiliate_list.affiliate_title
holder.affiliate_desc.text = affiliate_list.affiliate_desc
Glide.with(context)
.load(affiliate_list.affiliate_image)
.into(holder.affiliate_image)
val amazon_link = affiliate_list.affiliate_amazon_link
holder.store_btn1.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(amazon_link))
context.startActivity(intent)
}
}
class ViewHolder(itemview: View): RecyclerView.ViewHolder(itemview){
val affiliate_title = itemview.findViewById<TextView>(R.id.affiliate_title)
val affiliate_desc = itemview.findViewById<TextView>(R.id.affiliate_desc)
val affiliate_image = itemview.findViewById<ImageView>(R.id.affiliate_image)
var store_btn1 = itemview.findViewById<Button>(R.id.storeBtn1)
val store_btn2 = itemview.findViewById<Button>(R.id.storeBtn2)
}
Наконец, вот мой фрагмент, где я называю представление переработчика
val AFFILIATE_LIST : ArrayList<affiliateRvModel> = ArrayList()
var title_value : String = ""
var image_value : String = ""
var amazon_link : String = ""
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = AffiliateRVadapter(requireContext(),AFFILIATE_LIST)
affiliateRV.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
affiliateRV.setHasFixedSize(true)
affiliateRV.adapter = adapter
realtimeFirebaseData()
storeAffiliateList(title_value, image_value, amazon_link)
}
fun realtimeFirebaseData(){
val database = FirebaseDatabase.getInstance()
val mRef = database.getReference("affiliate_store")
mRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
for (list in snapshot.children){
title_value = list.child("product_title").getValue(String::class.java)!!
image_value = list.child("product_image").getValue(String::class.java)!!
amazon_link = list.child("amazon_link").getValue(String::class.java)!!
}
}
}
override fun onCancelled(error: DatabaseError) {
Log.w(TAG, "onCancelled", error.toException())
Toast.makeText(context, "$error was happened", Toast.LENGTH_SHORT).show()
}
})
}
fun storeAffiliateList(product_title : String, product_image : String, amazon_link: String){
AFFILIATE_LIST.add(affiliateRvModel(product_title
, product_image
,"هذا شرح تجريبي لوصف المنتج وما هو الشيء الذي يمكنك استخدامه فيه"
"n 1) بأمكانك الغاء ضهور الاعلانات في اي وقت "
"n 2) بأمكانك استعمال النقود لشراء عدد من الخدمات"
"n 3) بأمكانك استئجار اي صوت تريدة "
, amazon_link))
AFFILIATE_LIST.add(affiliateRvModel(product_title, product_image
,"هذا شرح تجريبي لوصف المنتج وما هو الشيء الذي يمكنك استخدامه فيه"
"n 1) بأمكانك الغاء ضهور الاعلانات في اي وقت "
"n 2) بأمكانك استعمال النقود لشراء عدد من الخدمات"
"n 3) بأمكانك استئجار اي صوت تريدة "
, amazon_link))
AFFILIATE_LIST.add(affiliateRvModel(product_title,product_image
,"هذا شرح تجريبي لوصف المنتج وما هو الشيء الذي يمكنك استخدامه فيه"
"n 1) بأمكانك الغاء ضهور الاعلانات في اي وقت "
"n 2) بأمكانك استعمال النقود لشراء عدد من الخدمات"
"n 3) بأمكانك استئجار اي صوت تريدة "
, amazon_link))
}
Любая помощь будет признательна
Комментарии:
1. Что именно в этом коде работает не так, как вы ожидаете? Расскажите нам, что не так с общим кодом. Есть ли у вас какие-либо ошибки?
2. @AlexMamo проблема заключалась в том, что данные firebase не отображаются в представлении recycler, когда я запускаю код
Ответ №1:
К счастью, я смог решить эту проблему. По-видимому, я должен был сделать так, чтобы переменные класса данных в моем файле kotlin выглядели так же, как переменные моей базы данных в реальном времени.
Вот мой класс данных сейчас // переменные должны быть такими же, как ключи в базе данных
data class affiliateRvModel(val product_title : String? = null,
val product_info : String?= null,
val product_image : String? = null,
val amazon_link : String? = null){
}
Вот мой фрагмент
private lateinit var AFFILIATE_LIST : ArrayList<affiliateRvModel>
private lateinit var mRef: DatabaseReference
private lateinit var recyclerView : RecyclerView
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerView = view.findViewById(R.id.affiliateRV)
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.setHasFixedSize(true)
AFFILIATE_LIST = arrayListOf<affiliateRvModel>()
}
override fun onStart() {
super.onStart()
realtimeFirebaseData()
}
fun realtimeFirebaseData(){
val database = FirebaseDatabase.getInstance()
mRef = database.getReference("affiliate_store")
mRef?.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
AFFILIATE_LIST.clear()
if (snapshot.exists()) {
for (list in snapshot.children) {
val data = list.getValue(affiliateRvModel::class.java)
AFFILIATE_LIST.add(data!!)
}
recyclerView.adapter = AffiliateRVadapter(requireContext(), AFFILIATE_LIST)
}
}
override fun onCancelled(error: DatabaseError) {
Log.w(TAG, "onCancelled", error.toException())
Toast.makeText(context, "$error was happened", Toast.LENGTH_SHORT).show()
}
})
}
Вот моя база данных // у них должны быть те же переменные, что и у моего класса данных