# #android-studio #kotlin #firebase-realtime-database
Вопрос:
Я попытался разместить массив снаружи и внутри. Если я помещу его снаружи, он примет только одно значение. Если я помещу его внутрь, он напечатает значения по-другому, поэтому, когда я пытаюсь сложить значения вместе. он по-прежнему печатается отдельно. Я прикрепил структуру firebase в виде изображения. Я очень новичок как в Котлине, так и в Firebase
private fun loadAverageRating() {
database = FirebaseDatabase.getInstance()
databaseReference = database?.reference!!.child("profile")
val storereference = databaseReference?.child(shopid.text.toString())?.child("rating")
storereference?.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapShot: DataSnapshot) {
if (dataSnapShot.exists()) {
dataSnapShot.children.forEach {
for (promoSnapshot in it.children) {
//averageRating = promoSnapshot.getValue(String::class.java)?.toFloat()!!
averageRating = promoSnapshot.getValue().toString().toFloat()
val total = listOf(averageRating)
//averageArrayRating!!.add(averageRating!!)
Log.d("test",total.sum().toString())
}
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
return
}
})
}
Ответ №1:
Это никак не может сработать, если вы объявляете переменную, которая будет содержать среднее значение внутри цикла, потому что оно будет сброшено для каждого отдельного элемента.
И я не могу прокомментировать, что было не так, когда у вас это было вне цикла, потому что вы не поделились этим кодом. Если бы я собирался выполнить итерацию, чтобы найти сумму, это выглядело бы так:
for (child in dataSnapShot.children) {
var total = 0f
for (grandchild in child.children) {
total = grandchild.value.toString().toFloat()
}
val average = total / child.children.size
Log.d("avg","The average of $child is $average")
}
Альтернативный способ вместо итерации состоит sumOf
в том, чтобы выбрать значения, которые вы хотите добавить, и он суммирует их для вас (на самом деле он все еще повторяется за кулисами). Имейте в виду, что он работает с двойниками, а не с поплавками. Затем просто разделите на размер, чтобы получить среднее значение.
for (child in dataSnapShot.children) {
val promos = child.children
val sum = promos.sumOf { it.value.toString().toDouble() }
val average = sum / promos.size
Log.d("avg","The average of $child is $average")
}
Комментарии:
1. эй, брат, спасибо тебе за решение, но, похоже, есть проблема с детским размером.дети.часть .. Android Studio не позволяет мне использовать .размер
2. и значения все еще не складываются .. он отображается отдельно.. точно так же, как работал мой предыдущий код …..