Не удалось получить данные для создания BarChart из базы данных Firebase в реальном времени. Если я поставлю некоторые статистические данные c, это прекрасно работает. Если я добавлю создание диаграммы в отдельную функцию, она вообще не будет работать, поэтому она переопределяет метод onStart. Что может быть причиной такого поведения кода? Вот мой код. Пожалуйста, помогите.
class ChartsActivity : AppCompatActivity() {
val ACT = "Charts activity"
private val mAuth = FirebaseAuth.getInstance()
private val mDatabase = FirebaseDatabase.getInstance().reference
private val today = SimpleDateFormat("dd/M/yyyy").format(Date())
var key : String? =""
var dbReferenceGoodMark = mDatabase.child ("marks").child("003")
var dbReferenceNormalMark = mDatabase.child ("marks").child("002")
var dbReferenceBadMark = mDatabase.child ("marks").child("001")
val valuesArray = ArrayList<BarEntry>()
//creating chart for one day
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_charts)
val userId = mAuth.currentUser!!.uid
getGood()
Log.d(ACT, "after good")
getNormal()
Log.d(ACT, "after normal")
getBad()
Log.d(ACT, "after bad")
}
private fun getGood() {
val findOutGoodID = dbReferenceGoodMark.orderByKey().limitToLast(1)
findOutGoodID!!.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(error: DatabaseError) {
Log.e(ACT, "onCancelled: ", error.toException())
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (d: DataSnapshot in dataSnapshot.children) {
key = d.key!!
Log.d(ACT, "key is " + key)
}
getGoodOpinion()
}
})
}
fun getNormal() {
val findOutNormalID = dbReferenceNormalMark.orderByKey().limitToLast(1)
findOutNormalID!!.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(error: DatabaseError) {
Log.e(ACT, "onCancelled: ", error.toException())
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (d: DataSnapshot in dataSnapshot.children) {
key = d.key!!
Log.d(ACT, "key is " + key)
}
getNormalOpinion()
}
})
}
fun getBad(){
val findOutBadID = dbReferenceBadMark.orderByKey().limitToLast(1)
findOutBadID!!.addListenerForSingleValueEvent(object: ValueEventListener{
override fun onCancelled(error: DatabaseError) {
Log.e(ACT, "onCancelled: ", error.toException())
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
for(d : DataSnapshot in dataSnapshot.children){
key = d.key!!
Log.d(ACT, "key is " + key)
}
getBadOpinion()
}
})
showToast(this, "Report for " + today)
}
fun getGoodOpinion(){
var dbReferenceGoodMark = mDatabase.child ("marks").child("003")
var findOutValues = dbReferenceGoodMark.child(key.toString())
findOutValues.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
Log.e(ACT, "onCancelled: ", error.toException())
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
var todaysGoodQuantity = dataSnapshot.child("quantity").value.toString()
addToValuesArray(3.toFloat(), todaysGoodQuantity.toFloat())
Log.d(ACT, todaysGoodQuantity)
}
})
}
fun getNormalOpinion(){
var dbReferenceNormalMark = mDatabase.child ("marks").child("002")
var findOutValues = dbReferenceNormalMark.child(key.toString())
findOutValues.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
Log.e(ACT, "onCancelled: ", error.toException())
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
var todaysNormalQuantity = dataSnapshot.child("quantity").value.toString()
addToValuesArray(2.toFloat(), todaysNormalQuantity.toFloat())
Log.d(ACT, todaysNormalQuantity)
}
})
}
fun getBadOpinion(){
var dbReferenceBadMark = mDatabase.child ("marks").child("003")
var findOutValues = dbReferenceBadMark.child(key.toString())
findOutValues.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
Log.e(ACT, "onCancelled: ", error.toException())
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
var todaysBadQuantity = dataSnapshot.child("quantity").value.toString()
addToValuesArray(1.toFloat(), todaysBadQuantity.toFloat())
Log.d(ACT, todaysBadQuantity)
}
})
}
fun addToValuesArray(markNumber:Float, markValue:Float){
valuesArray.add(BarEntry(markNumber, markValue.toFloat()))
}
override fun onStart(){
super.onStart()
if (mAuth.currentUser==null){
startActivity(Intent(this, LoginActivity::class.java))
finish()
}
Log.d(ACT, valuesArray.size.toString())
val size = valuesArray.size
val set1: BarDataSet
set1 = BarDataSet(valuesArray, "Ussat kitchen marks for " + today)
set1.setColors(*ColorTemplate.LIBERTY_COLORS)
val dataSets = ArrayList<IBarDataSet>()
dataSets.add(set1)
val data = BarData(dataSets)
data.setValueTextSize(10f)
data.barWidth = 0.9f
chart.animateY(5000)
chart.setTouchEnabled(false)
chart.data = data
}
}