Java 域中的空指针异常
我有一些函数,可以在领域数据库中保存数据“对话框”和“消息”Java 域中的空指针异常,java,android,realm,Java,Android,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.beg
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();
}
为什么会有这样的错误?
PS-rMessage
和rDialog
不为空(当我在调试器中检查它时)
日志:
看起来,问题出在“具有领域类型的对象副本”和“领域db对象的真实实例”中,请参阅 我编辑的代码现在看起来像:
private void addMessageToDialog(ObservableDialog dialog, DialogMessage dialog_msg) {
rDialog rDialog = findDialog(dialog.getChatId());
rMessage rMessage = constructObjectRMessage(dialog_msg);
realm.beginTransaction();
rMessage = realm.copyToRealm(rMessage);
if(rDialog==null) {
rDialog = constructObjectRDialog(dialog);
if(rDialog!=null) rDialog = realm.copyToRealm(rDialog);
else realm.cancelTransaction();
} else Log.v(TAG,"dialog is not null");
rDialog.getDialogMessages().add(rMessage);
realm.commitTransaction();
}
执行
copyToRealm
-应使用返回类型rDialog
编辑领域对象(但不是独立对象的副本)从logacat@ChristianMelchior,你能帮我解决这个问题吗?
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)
private void addMessageToDialog(ObservableDialog dialog, DialogMessage dialog_msg) {
rDialog rDialog = findDialog(dialog.getChatId());
rMessage rMessage = constructObjectRMessage(dialog_msg);
realm.beginTransaction();
rMessage = realm.copyToRealm(rMessage);
if(rDialog==null) {
rDialog = constructObjectRDialog(dialog);
if(rDialog!=null) rDialog = realm.copyToRealm(rDialog);
else realm.cancelTransaction();
} else Log.v(TAG,"dialog is not null");
rDialog.getDialogMessages().add(rMessage);
realm.commitTransaction();
}