i’m a new android programmer, i have this project that i created an android app which shows my data from firebase in a line chart. But i don’t know why the chart is not working like this:
enter image description here
This is my MainActivity.kt:
<code>package com.example.sktt
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.database.*
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData
import com.github.mikephil.charting.data.LineDataSet
import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() {
private lateinit var lineChart: LineChart
private val entries = ArrayList<Entry>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Firebase Database
val database = FirebaseDatabase.getInstance()
val myRef = database.getReference("SKTT/EEG")
lineChart = findViewById(R.id.lineChart)
// Read from the database in real-time
myRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
entries.clear() // Clear previous entries
var index = 0
for (data in dataSnapshot.children) {
val value = data.getValue(Double::class.java) ?: continue
entries.add(Entry(index++.toFloat(), value.toFloat()))
}
setupChart()
}
override fun onCancelled(error: DatabaseError) {
// Handle possible errors.
}
})
}
private fun setupChart() {
val dataSet = LineDataSet(entries, "EEG Data")
dataSet.color = resources.getColor(R.color.teal_200)
dataSet.valueTextColor = resources.getColor(R.color.black)
val lineData = LineData(dataSet)
lineChart.data = lineData
lineChart.invalidate() // Refresh the chart
}
}
</code>
<code>package com.example.sktt
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.database.*
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData
import com.github.mikephil.charting.data.LineDataSet
import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() {
private lateinit var lineChart: LineChart
private val entries = ArrayList<Entry>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Firebase Database
val database = FirebaseDatabase.getInstance()
val myRef = database.getReference("SKTT/EEG")
lineChart = findViewById(R.id.lineChart)
// Read from the database in real-time
myRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
entries.clear() // Clear previous entries
var index = 0
for (data in dataSnapshot.children) {
val value = data.getValue(Double::class.java) ?: continue
entries.add(Entry(index++.toFloat(), value.toFloat()))
}
setupChart()
}
override fun onCancelled(error: DatabaseError) {
// Handle possible errors.
}
})
}
private fun setupChart() {
val dataSet = LineDataSet(entries, "EEG Data")
dataSet.color = resources.getColor(R.color.teal_200)
dataSet.valueTextColor = resources.getColor(R.color.black)
val lineData = LineData(dataSet)
lineChart.data = lineData
lineChart.invalidate() // Refresh the chart
}
}
</code>
package com.example.sktt
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.database.*
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData
import com.github.mikephil.charting.data.LineDataSet
import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() {
private lateinit var lineChart: LineChart
private val entries = ArrayList<Entry>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Firebase Database
val database = FirebaseDatabase.getInstance()
val myRef = database.getReference("SKTT/EEG")
lineChart = findViewById(R.id.lineChart)
// Read from the database in real-time
myRef.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
entries.clear() // Clear previous entries
var index = 0
for (data in dataSnapshot.children) {
val value = data.getValue(Double::class.java) ?: continue
entries.add(Entry(index++.toFloat(), value.toFloat()))
}
setupChart()
}
override fun onCancelled(error: DatabaseError) {
// Handle possible errors.
}
})
}
private fun setupChart() {
val dataSet = LineDataSet(entries, "EEG Data")
dataSet.color = resources.getColor(R.color.teal_200)
dataSet.valueTextColor = resources.getColor(R.color.black)
val lineData = LineData(dataSet)
lineChart.data = lineData
lineChart.invalidate() // Refresh the chart
}
}
This is my AndroidManifest.xml:
<code><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sktt">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
</code>
<code><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sktt">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
</code>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sktt">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
This is my activity_main.xml:
<code><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/lineChart"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
</code>
<code><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/lineChart"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
</code>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/lineChart"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Please help me solve this problem, thank you very much!!!
New contributor
Long Cao is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.