2016-07-02 2 views
1

저는 Realm 데이터베이스로 응용 프로그램을 개발하고 있습니다. 나는 그 응용 프로그램을 성공적으로 개발했고, 오늘 나는 그것에 또 다른 부분을 추가했다. 그 동안 오브젝트 확장 된 RealmObject를 변경해야했습니다. 그 후에 나는 오류가있어 그 변화를 되돌립니다. 그러나 그 후에도 같은 오류가 반복해서 발생합니다. , PID com.foxastudios.stopnosocomials : 26,320 java.lang.NullPointerException이 여기 내 코드입니다 :Android에서 영역 개체를 저장하는 중 오류가 발생했습니다.

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

그리고 여기에 내가지고있어 오류 발생 :

치명적인 예외 : 주요 프로세스 : ObserverRealmProxy.java:239 ( io.realm.ObserverRealmProxy.realmSet $의 UUID에 가상 메서드에 null의 객체 참조 에 'io.realm.BaseRealm io.realm.ProxyState.getRealm $ 영역을() 호출 시도 에서 com.foxastudios.stopnosocomials.models.Observer.setUuid (Observer.java:107 AT) ) io.realm.ObserverRealmProxy에서 com.foxastudios.stopnosocomials.models.Observer. (Observer.java:26) . io.realm.DefaultRealmModuleMediator.newInstance (DefaultRealmModuleMediator.java:145)에서 (ObserverRealmProxy.java:0) io.realm.BaseRealm.get (BaseRealm.java:603)에서 io.realm.Realm.createObject에서 (Realm.java:709) at io.realm.ObserverRealmProxy.copy (ObserverRealmProxy.java:626) at,363,210 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) 에서 io.realm.Realm.copyToRealmOrUpdate (Realm.java:747) (Realm.java:1065) 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) at 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

영역 객체의 기본 생성자는 비어 있어야합니다 :

선언 된 경우

(매개 변수없이 생성자) 기본 생성자는 항상 비어 있어야합니다 . 그 이유는 기본 생성자가 영역 인스턴스가 있다고 가정하는 메소드를 호출하기 때문입니다.

출처 : 생성자가있는 동안

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

감사합니다. 그것은 효과가 있었다. 그러나 혼란은 일찍도 효과가있었습니다. –

관련 문제