'How to write live data in Piechart from local room database in Android?
I am Creating an Expense Manager App for that I want to fetch the data from the local room database and show it live on pieChart as Report. Here is the code
- Here is the code from debited.kt where I want to fetch the Data:
class debited : AppCompatActivity() {
val db : DebitedDatabase by lazy { DebitedDatabase.getDatabase(this) }
lateinit var viewModel: ExpenserViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_debited)
//setup()
// Calendar
val calender = Calendar.getInstance()
val day =calender.get(Calendar.DAY_OF_MONTH)
val month = calender.get(Calendar.MONTH)
val year = calender.get(Calendar.YEAR)
debitDate.setOnClickListener {
val dbd = DatePickerDialog(this,DatePickerDialog.OnDateSetListener { view, mYear, mMonth, mDay ->
// Setting the Selected Date to TextView
debitDate.setText("" + mDay + "/" + mMonth.plus(1) + "/" + mYear)
},year,month,day)
dbd.show()
}
// Creating Anonymous class of onItemSelectedListener
debitCategory.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(aview: AdapterView<*>?, view: View?, position: Int, id: Long) {
val dc: String = aview?.getItemAtPosition(position).toString()
}
override fun onNothingSelected(aview: AdapterView<*>?) {
}
}
// Adding On Click Listener to Button
debitSave.setOnClickListener (View.OnClickListener {
val dDate = debitDate.text.toString()
val dAmount = debitAmount.text.toString()
val dCategory = debitCategory.selectedItem.toString() // get data from debitCategory and showing it in textView
val dNote = debitNote.text.toString()
//val total = "$dDate, $dAmount, $dCategory, $dNote"
viewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application))
.get(ExpenserViewModel::class.java)
viewModel.insert(DebitedData(dDate,"₹"+dAmount,dCategory,dNote))
Log.d("Data", "$viewModel")
Toast.makeText(this,"Data Saved",Toast.LENGTH_SHORT).show()
})
}
}
- Here is the reportActivity.kt where the data will be Shown:
class report : AppCompatActivity() {
val db: DebitedDatabase by lazy { DebitedDatabase.getDatabase(this) }
lateinit var viewModel: ExpenserViewModel
private lateinit var pieChart: PieChart
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_report)
pieChart = findViewById(R.id.pieChart)
setDataToPieChart()
recyclerView.layoutManager = LinearLayoutManager(this)
val adapter = recentRecyclerAdapter(this)
recyclerView.adapter = adapter
viewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application)).get(
ExpenserViewModel::class.java)
viewModel.allData.observe(this, androidx.lifecycle.Observer { List ->
List?.let {
adapter.update(it)
}
})
}
private fun setDataToPieChart() {
pieChart.setUsePercentValues(true)
val dataEntries = ArrayList<PieEntry>()
dataEntries.add(PieEntry(10f, debitCategory))
val dataSet = PieDataSet(dataEntries, "")
dataSet.valueTextSize=0f
val colors = java.util.ArrayList<Int>()
colors.add(Color.GRAY)
colors.add(Color.BLUE)
colors.add(Color.RED)
colors.add(Color.GREEN)
colors.add(Color.MAGENTA)
dataSet.setColors(colors)
val data = PieData(dataSet)
pieChart.data = data
pieChart.centerTextRadiusPercent = 0f
pieChart.isDrawHoleEnabled = false
pieChart.legend.isEnabled = false
pieChart.description.isEnabled = false
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
