2016-07-02 18 views
1

私はRealmデータベースでアプリケーションを開発しています。私はそのアプリを開発して成功しましたが、今日は別の部分を追加しました。その間、私はオブジェクト拡張RealmObjectを変更する必要がありました。その後、私はエラーが発生し、その変更を元に戻します。しかしその後も同じエラーが何度も繰り返されています。 、PID com.foxastudios.stopnosocomials:26320 java.lang.NullPointerExceptionがここに私のコードです:AndroidでRealmオブジェクトを保存中にエラーが発生しました

private String createObserver() { 
    final Observer observer = new Observer(); 
    Log.d("UUID",observer.getUuid()); 
    observer.setObserver_id(getNewObserverID()); 
    observer.setDevice_id(DEVICE_ID); 
    observer.setName(userName.getText().toString()); 
    observer.setPhone(userPhone.getText().toString()); 
    observer.setCategory(userCategory.getSelectedItem().toString()); 
    observer.setHospital(userHospital.getSelectedItem().toString()); 
    observer.setSection(userSection.getSelectedItem().toString()); 
    observer.setUpdated_date(DATE); 

    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      realm.copyToRealmOrUpdate(observer); 
     } 
    }); 
    return observer.getUuid(); 
} 

そして、ここで私が取得していますエラー:

致命的な例外:メイン プロセス: io.realm.ObserverRealmProxy.realmSet $のUUIDでヌル オブジェクト参照 (ObserverRealmProxy.java:239に 'io.realm.BaseRealm io.realm.ProxyState.getRealm $レルム()' 仮想メソッドを呼び出す試み) でcom.foxastudios.stopnosocomials.models.Observer.setUuid(Observer.java:107) com.foxastudios.stopnosocomials.models.Observerで。(Observer.java:26) io.realm.ObserverRealmProxyました。 (ObserverRealmProxy.java:0) io.realm.Realm.createObjectでio.realm.BaseRealm.getでio.realm.DefaultRealmModuleMediator.newInstance(DefaultRealmModuleMediator.java:145) (BaseRealm.java:603) ( でRealm.java:709) at io.realm.ObserverRealmProxy.copy(ObserverRealmProxy.java:626) at io.realm.ObserverRealmProxy.copyOrUpdate io.realm.Realm.copyOrUpdate(Realm.java:1272)で io.realm.DefaultRealmModuleMediator.copyOrUpdate(DefaultRealmModuleMediator.java:175)で(ObserverRealmProxy.java:616) でio.realm.Realm.executeTransactionで com.foxastudios.stopnosocomials.SessionActivity $ 3.execute(SessionActivity.java:143) (Realm.java:1065)でio.realm.Realm.copyToRealmOrUpdate(Realm.java:747) at com.foxastudios.stopnosocomials.SessionActivity.createObserver(SessionActivity.java:140) at com.foxastudios.stopnosocomials.SessionActivity.access $ 300(SessionActivity.java:29) の com.foxastudios.stopnosocomials.SessionActivity $ 2.onClick(SessionActivity.java:101) android.view.View.performClick(View。 java:4756) android.view.View $ PerformClick.run(View.java:19749) (android.os.Handler.handleCallback(Handler.java:739)) (android.os.Handler.dispatchMessage(Handler。 java:95) とandroid.os.Looper.loop(Looper.java:135) とandroid.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(ネイティブメソッド com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)com.android.internalで でjava.lang.reflect.Method.invoke(Method.java:372) で) 。 os.ZygoteInit.main(ZygoteInit。java:694)

Observerオブジェクトのnull値が何回もチェックされています。しかし、すべての値が正しく、例外なくなるまで:レルムオブジェクトのデフォルトコンストラクタが空でなければなりません

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     realm.copyToRealmOrUpdate(observer); 
    } 
}); 
+0

レルム内でマイグレーションを実装しましたか? –

+0

いいえ前のデータ構造に戻しました。以前のデータベースを持っていない新しいデバイスでも、私はそのエラーを受けました。 –

+0

あなたはあなたのUuidをどこで設定しましたか? Observerオブジェクトコンストラクタの –

答えて

2

宣言した場合は、デフォルトコンストラクタ(パラメータなしのコンストラクタ)は常に空でなければなりません。その理由は、デフォルトのコンストラクタが、Realmインスタンスが存在すると仮定するメソッドを呼び出すためです。

出典:コンストラクタがある一方で

public int realmGet$uuid() { 
    proxyState.getRealm$realm().checkIfValid(); 
    return (int) proxyState.getRow$realm().getLong(columnInfo.uuidIndex); 
} 

proxyStatenullです:あなたは

Observer.setUuid()は、次のようになりますObserverRealmProxy.realmGet$uuid()を呼び出しますあなたのコンストラクタでsetUuid()を呼び出すことが許可されていませんhttps://realm.io/docs/java/latest/#limitations

実行済み

+0

ありがとう。出来た。しかし混乱は早くも効く。 –

関連する問題