RealmObject without @PrimaryKey cannot be updated

I am currently reorganizing some old application and I am trying to switch from SQLite to Realm. I used to use Realm, and I have never encountered such problems. When I launch my application for the first time (after installation), I get this exception:

E/AndroidRuntime: FATAL EXCEPTION:
Process: xx.xxx.xxx.beta.realm, PID: 25947
java.lang.IllegalArgumentException: A RealmObject with no @PrimaryKey cannot be updated: class xx.xxx.xxx.realm.Vod
   at io.realm.Realm.checkHasPrimaryKey(Realm.java:1184)
   at io.realm.Realm.copyToRealmOrUpdate(Realm.java:713)
   at xx.xxx.xxx.services.VodService$4.run(VodService.java:232)
   at java.lang.Thread.run(Thread.java:818)

The My Vod class looks like this, and the object is correctly created, i.e. Matters for PrimaryKey and all other fields:

public class Vod extends RealmObject {

    @PrimaryKey
    private String uuid;

    private String name;
    private Integer lengthMin;
    private Boolean hasTrailer;
    private String description;
    private String originalName;

    //etc...

    //getters & setters

. ( ) - . , . . , . , . , Vod, Vod , , User, "no @PrimaryKey" User.

:

D/REALM: jni: ThrowingException 5, , .
D/REALM: Exception has been throw: File not found: .
E/AndroidRuntime: FATAL EXCEPTION:
   Process: xx.xxx.xxx.beta.realm, PID: 28555
   io.realm.exceptions.RealmIOException: File not found: .
       at io.realm.internal.SharedGroup.createNativeWithImplicitTransactions(Native Method)
       at io.realm.internal.SharedGroup.<init>(SharedGroup.java:67)
       at io.realm.internal.SharedGroupManager.<init>(SharedGroupManager.java:47)
       at io.realm.BaseRealm.<init>(BaseRealm.java:76)
       at io.realm.Realm.<init>(Realm.java:126)
       at io.realm.Realm.createAndValidate(Realm.java:246)
       at io.realm.Realm.createInstance(Realm.java:231)
       at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:114)
       at io.realm.Realm.getDefaultInstance(Realm.java:181)
       at xx.xxx.xx.services.RecordingService$9.run(RecordingService.java:317)
    at java.lang.Thread.run(Thread.java:818) 

, Realm? :

public class MainApplication extends Application {

  private static Context mContext;

  @Override
  public void onCreate() {
    super.onCreate(); 

    mContext = getApplicationContext();

    mRealmConfig = new RealmConfiguration.Builder(mContext).build();
    Realm.setDefaultConfiguration(mRealmConfig);
  }
}

, :

Realm localRealm = Realm.getDefaultInstance();

- ? - ? , . .

( io.realm: realm-android: 0.87.4)

EDIT: ( ADB), . , , path/data/data// . ? , .

:  1.

  1. ADB cd:/data/data/xx.xxx.xxx.beta.realm:

  2. ADB run-as xx.xxx.xxx.beta.realm → cd files → ls → empty

  3. Stetho,

  4. ( )

  5. ( "no @PrimaryKey" ) ( )

  6. ADB → files folder → ls → , default.realm, default.realm.lock, default.realm.log, default.realm.log_a, default.realm.log_b

  7. , , Stetho.

, - . , , :

Rejecting re-init on previously-failed class java.lang.Class<io.realm.rx.RealmObservableFactory$4>

: https://github.com/realm/realm-java/issues/1990, , , .

+4

Source: https://habr.com/ru/post/1629787/


All Articles