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;
. ( ) - . , .
. , . , . , 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.
ADB cd:/data/data/xx.xxx.xxx.beta.realm:
ADB run-as xx.xxx.xxx.beta.realm → cd files → ls → empty
Stetho,
( )
( "no @PrimaryKey" ) ( )
ADB → files folder → ls → , default.realm, default.realm.lock, default.realm.log, default.realm.log_a, default.realm.log_b
, ,
Stetho.
, - . , , :
Rejecting re-init on previously-failed class java.lang.Class<io.realm.rx.RealmObservableFactory$4>
: https://github.com/realm/realm-java/issues/1990, , , .