Here is the code for fetching data from sqlite database as livedata
private LiveData<ArrayList<Message>> loadAllMessagesOfThisChat() {
final MutableLiveData<ArrayList<Message>> messages= new MutableLiveData<>();
ArrayList<Message> messagesArrayList = new ArrayList<>();
SQLiteDatabase mDb = messagesDbHelper.getReadableDatabase();
String[] projection = {
MessageDetails.COLUMN_SENDER_UID,
MessageDetails.COLUMN_MESSAGE,
MessageDetails.TIMESTAMP_ID,
MessageDetails.COLUMN_IMAGE_URI};
Cursor cursor = mDb.query("receiver" + receiverUID, projection, null, null, null, null, null);
int messageColumnIndex = cursor.getColumnIndex(MessageDetails.COLUMN_MESSAGE);
int timestampColumnIndex = cursor.getColumnIndex(MessageDetails.TIMESTAMP_ID);
int imageURIColumnIndex = cursor.getColumnIndex(MessageDetails.COLUMN_IMAGE_URI);
int senderUIDColumnIndex = cursor.getColumnIndex(MessageDetails.COLUMN_SENDER_UID);
while (cursor.moveToNext()) {
Message message = new Message();
message.setMessage(cursor.getString(messageColumnIndex));
message.setImageUrl(cursor.getString(imageURIColumnIndex));
message.setTimestamp(String.valueOf(cursor.getInt(timestampColumnIndex)));
message.setUserID(cursor.getString(senderUIDColumnIndex));
messagesArrayList.add(message);
}
messages.setValue(messagesArrayList);
cursor.close();
mDb.close();
return (LiveData<ArrayList<Message>>) messages;
}
And I am using this in oncreate
LiveData<ArrayList<Message>> messages=loadAllMessagesOfThisChat();
messages.observe(this, new Observer<ArrayList<Message>>() {
@Override
public void onChanged(ArrayList<Message> messages) {
messagesAdapter.setMessages(messages);
}
});
But whenever i send a new message , it gets added in the database but change are not reflected in the UI until i restart my activity
Seems like observer is not doing anything
I am trying to use livedata with sqlite as i cannot use room for some reasons