【发布时间】:2021-11-15 16:49:43
【问题描述】:
这是从 sqlite 数据库中获取数据作为 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;
}
我在 oncreate 中使用它
LiveData<ArrayList<Message>> messages=loadAllMessagesOfThisChat();
messages.observe(this, new Observer<ArrayList<Message>>() {
@Override
public void onChanged(ArrayList<Message> messages) {
messagesAdapter.setMessages(messages);
}
});
但是每当我发送一条新消息时,它都会被添加到数据库中,但更改不会反映在 UI 中,直到我重新启动我的活动
似乎观察者没有做任何事情
我正在尝试将 livedata 与 sqlite 一起使用,因为由于某些原因我无法使用空间
【问题讨论】:
标签: java android sqlite android-studio android-livedata