'Unable to fetch data from Room Database to Bar Chart

I was trying to get data from Room Database to Bar Chart it is not showing any error but still data is not showing in my Device .when I am run my application is was showing blank screen. I didn't get the mistake

class MainActivity2 : AppCompatActivity() {

    lateinit var repository: Repository
    lateinit var daoClass: DaoClass
    lateinit var adapter: adapterClass
    lateinit var databaseClass: DatabaseClass
    lateinit var factory: ViewModelFactory
    lateinit var viewmodelClass: ViewmodelClass
    private var newList = mutableListOf<EntityClass>()
    private var list = mutableListOf<EntityClass>()
    lateinit var barData: BarData
    lateinit var barDataSet: BarDataSet
    private var barEntry: ArrayList<BarEntry> = ArrayList()
    private var xvalues: ArrayList<String> = ArrayList()
    private var yvalues: ArrayList<BarEntry> = ArrayList()


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        databaseClass = DatabaseClass.getDatabase(this)
        repository = Repository(databaseClass)
        daoClass = databaseClass.getDao()
        factory = ViewModelFactory(repository)
        viewmodelClass = ViewModelProvider(this, factory)[ViewmodelClass::class.java]

        insertData(list)

        if (newList.isEmpty()) {
            getAllData()
        }
        getEntries()

        barDataSet = BarDataSet(yvalues, "Data Set")
        barData = BarData(barDataSet)

        barChart.data = barData
        barDataSet.colors = ColorTemplate.createColors(ColorTemplate.MATERIAL_COLORS)
        barDataSet.valueTextColor = Color.BLACK
        barDataSet.valueTextSize = 16f
    }

    private fun getEntries() {
        newList.forEach {
            yvalues.add(BarEntry(it.Date.toFloat(), it.Sessions.toFloat()))
        }
    }

    private fun getAllData() {


        viewmodelClass.getData().observe(this, Observer {
            newList.clear()
            newList.addAll(it)
            setRecyclerView()
        })

    }

    private fun setRecyclerView() {

        adapter = adapterClass(newList)
        recyclerview.adapter = adapter
        recyclerview.layoutManager = LinearLayoutManager(this)
    }

    private fun insertData(list: MutableList<EntityClass>) {

        list.clear()
        val item1 = EntityClass("01 March 2022", 5)
        list.add(item1)
        val item2 = EntityClass("02 March 2022", 7)
        list.add(item2)
        val item3 = EntityClass("03 March 2022", 4)
        list.add(item3)
        val item4 = EntityClass("04 March 2022", 0)
        list.add(item4)
        val item5 = EntityClass("05 March 2022", 6)
        list.add(item5)
        val item6 = EntityClass("06 March 2022", 5)
        list.add(item6)
        val item7 = EntityClass("07 March 2022", 6)
        list.add(item7)
        val item8 = EntityClass("08 March 2022", 4)
        list.add(item8)
        val item9 = EntityClass("09 March 2022", 3)
        list.add(item9)
        val item10 = EntityClass("10 March 2022", 9)
        list.add(item10)
        val item11 = EntityClass("11 March 2022", 3)
        list.add(item11)
        val item12 = EntityClass("12 March 2022", 5)
        list.add(item12)
        val item13 = EntityClass("13 March 2022", 0)
        list.add(item13)
        val item14 = EntityClass("14 March 2022", 10)
        list.add(item14)

        CoroutineScope(Main).launch {
            viewmodelClass.deleteData()
            list.forEach {
                val datadb = EntityClass(it.Date, it.Sessions)
                viewmodelClass.insertData(datadb)
            }

        }
    }
}

I am trying to fetch data from the list to bar Entry but it is showing blank screen on the device .



Solution 1:[1]

  1. you need to insert the list inside the adapter.

private lateinit var viewModel : YourViewModel

private fun getAllData() {
      viewmodelClass.getData().observe(this, Observer {
          newList.clear()
          newList.addAll(it)
          // remove this setRecyclerView()
          // add this 
           notifyItemChanged()
      })}
  1. then inside your main activity ,you need to connect your viewModel to your adapter.

    adapter.viewmodel = viewModel // viewModel is initialized in your activity

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1