Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 域中的空指针异常_Java_Android_Realm - Fatal编程技术网

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