У меня есть некоторые функции, которые сохраняют данные «Диалог» и «Сообщение» в области БД.Исключение Null Pointer в Realm
private void addMessageToDialog(ObservableDialog dialog, DialogMessage dialog_msg) {
// if i try to use FINDDIALOG - i have NPE errors
rDialog rDialog = findDialog(dialog.getChatId());
realm.beginTransaction();
rMessage rMessage = constructObjectRMessage(dialog_msg);
realm.copyToRealm(rMessage);
if(rDialog==null) rDialog = constructObjectRDialog(dialog);
rDialog.getDialogMessages().add(rMessage);
realm.copyToRealmOrUpdate(rDialog);
realm.commitTransaction();
}
private rDialog constructObjectRDialog(ObservableDialog dialog) {
try {
rDialog rDialog = new rDialog();
rDialog.setChatId(dialog.getChatId());
rDialog.setCreator(dialog.isCreator());
rDialog.setNickname(dialog.getNickname());
rDialog.setAvatarUrl(dialog.getAvatarUrl());
rDialog.setPartnerOkId(dialog.getPartnerId());
rDialog.setBanned(dialog.isBanned());
List<ChatStatus> statusHistory = dialog.getStatusHistory();
RealmList<rChatStatus> statuses = new RealmList<>();
for (ChatStatus s : statusHistory) {
rChatStatus st = constuctorRChatCtatus(s.name());
realm.copyToRealm(st);
statuses.add(st);
}
rDialog.setStatusHistory(statuses);
List<DialogMessage> dialogMessages = dialog.getMessages();
RealmList<rMessage> messages = new RealmList<>();
for (DialogMessage d : dialogMessages) {
rMessage m = constructObjectRMessage(d);
realm.copyToRealm(m);
messages.add(m);
}
rDialog.setDialogMessages(messages);
return rDialog;
} catch(Exception e){
Log.e(TAG,e.getMessage());
}
return null;
}
private rDialog findDialog(String chatId) {
RealmResults<rDialog> d = realm.where(rDialog.class)
.equalTo("chatId", chatId)
.findAll();
if(d.size()==0) return null;
return d.first();
}
Когда я использую этот код, он работает только тогда, когда я не использую findDialog
(и realm.where
метод, и использовать только constructObjectRDialog
). Но когда я пытаюсь использовать findDialog
(в addMessageToDialog
) У меня есть ошибка NPE в
rDialog.getDialogMessages().add(rMessage);
Почему может быть такая erros? PS - rMessage
и rDialog
не нулевые (когда я проверить его в отладчике)
LOG:
02-28 11:43:21.220 6432-6460/com.OkLove.OkLoveDroid E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-468
Process: com.OkLove.OkLoveDroid, PID: 6432
java.lang.NullPointerException
at io.realm.RealmList.add(RealmList.java:120)
at com.OkLove.OkLoveDroid.BackgroundTasksHandlers.DbHandler.addMessageToDialog(DbHandler.java:98)
at com.OkLove.OkLoveDroid.BackgroundTasksHandlers.DbHandler.handleMessage(DbHandler.java:77)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at com.OkLove.OkLoveDroid.BackgroundTasksHandlers.DbHandlerThread.run(DbHandlerThread.java:30)
Опубликовать свой журнал с logacat –
@ChristianMelchior, вы можете помочь мне с этой проблемой? –