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()
}