Home > front end >  RecycleView didn't display records from SQLite database
RecycleView didn't display records from SQLite database

Time:11-09

RecycleView didn't display records from SQLite database

I don't know what has gone wrong... please help.

Fragment

binding.recycle.layoutManager = LinearLayoutManager(requireContext())
val data = ArrayList<TripModelClass>()
val dbHandler = DatabaseHandler(requireContext())
val cursor = dbHandler.displayRecord(userId)
if (cursor != null) {
    while (cursor.moveToNext()) {
        if (cursor.moveToFirst()) {
            data.add(TripModelClass(userId,cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5),
                cursor.getString(5),cursor.getInt(6),cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
                cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),cursor.getString(15),
                cursor.getString(16),cursor.getString(17)))
        }
    }
val adapter = MyAdapter(data)
binding.recycle.adapter = adapter

Database handler class

 fun displayRecord(user_id:String):Cursor? {
     val db = this.readableDatabase
     var cursor: Cursor? =  null
     if (db != null){
         cursor = db.rawQuery("select * from FlightTripTable where user_id = ? ", arrayOf(user_id))
     }
     return  cursor
 }

CodePudding user response:

Looks like the data passed to adapter is empty ArrayList<TripModelClass>() as the processes are concurrent.

Instead implement a setData() like function in your adapter and then pass the completed data when you've completed fetched data and then notify the adapter.

Like

val adapter = MyAdapter()
//  data.add(...)
/// after process is completed 
adapter.setData( data ) 

where setData() looks something like

fun setData( newData : YoutType ){
    this.data =  newData
    /// data is the private mutable instance of data for adapter .
    notifyDatasetChanged()
}
  • Related