i am new with android studio and koitlin programming in general. I am making a app to show data for humidity and soil moisture sensor. My code seems to work well as there is no error, but the I still not able to get my pieview to show any data from firebase and it shows only 0
I have tried fixing any errors available and making sure i call the right path in firebase. My app doesn't look nice at the moment, i plan to fix it after the data can be retrieved
Here is the code
Data.kt
package com.example.babipunyaproject
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.babipunyaproject.databinding.ActivityDataBinding
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase
import az.plainpie.PieView
import az.plainpie.animation.PieAngleAnimation
class Data : AppCompatActivity() {
private lateinit var pieViewHum: PieView
private lateinit var pieViewSoil: PieView
private lateinit var binding: ActivityDataBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("DataActivity", "onCreate called")
binding = ActivityDataBinding.inflate(layoutInflater)
pieViewHum = binding.pieViewHum
pieViewSoil = binding.pieViewSoil
setContentView(binding.root)
Log.d("DataActivity", "Binding initialized")
// Initialize Firebase
val database = Firebase.database
Log.d("DataActivity", "Firebase database initialized")
// Fetch humidity data
val humidityRef = database.getReference("DHT11 testing/sensor/humidity")
humidityRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
Log.d("DataActivity", "Humidity data fetched")
val humidity = snapshot.getValue(String::class.java)?.toFloatOrNull() ?: 0f
updatePieView(binding.pieViewHum, humidity)
}
override fun onCancelled(error: DatabaseError) {
Log.e("DataActivity", "Failed to fetch humidity data: ${error.message}")
}
})
// Fetch soil moisture data
val soilMoistureRef = database.getReference("DHT11 testing/sensor/moistureValue")
soilMoistureRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
Log.d("DataActivity", "Soil moisture data fetched")
val soilMoisture = snapshot.getValue(String::class.java)?.toFloatOrNull() ?: 0f
updatePieView(binding.pieViewSoil, soilMoisture)
}
override fun onCancelled(error: DatabaseError) {
Log.e("DataActivity", "Failed to fetch soil moisture data: ${error.message}")
}
})
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.linearLayout2)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
}
private fun updatePieView(pieView: PieView, value: Float) {
val valueString = value.toInt().toString() // Convert float to string
pieView.percentage = value // Keep the value for visualization
pieView.setInnerText(valueString) // Display the value as a string inside the PieView
pieView.pieInnerPadding = 30
val animation = PieAngleAnimation(pieView)
animation.duration = 2000
pieView.startAnimation(animation)
}
}
activity_data.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=";
xmlns:tools=";
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grey"
tools:context=".Data">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingConstraints">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<!-- Third LinearLayout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Space
android:layout_width="@dimen/auto_dp_10"
android:layout_height="wrap_content" />
<TextView
android:layout_width="193dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="5dp"
android:background="@drawable/background_gardient"
android:gravity="center"
android:text="@string/Air_Humidity"
android:textColor="#ffff"
android:textSize="20sp" />
<Space
android:layout_width="@dimen/auto_dp_10"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginStart="5dp"
android:background="@drawable/background_gardient"
android:gravity="center"
android:text="@string/Soil_Moisture"
android:textColor="#ffff"
android:textSize="20sp" />
</LinearLayout>
<!-- Fourth LinearLayout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Space
android:layout_width="40dp"
android:layout_height="@dimen/auto_dp_15" />
<androidx.cardview.widget.CardView
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_margin="20dp">
<az.plainpie.PieView
android:id="@+id/pieView_hum"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
tools:ignore="MissingConstraints" />
</androidx.cardview.widget.CardView>
<Space
android:layout_width="60dp"
android:layout_height="20dp" />
<androidx.cardview.widget.CardView
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_margin="20dp"
android:layout_marginStart="70dp">
<az.plainpie.PieView
android:id="@+id/pieView_soil"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
tools:ignore="MissingConstraints" />
</androidx.cardview.widget.CardView>
</LinearLayout>
</TableLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>