kryo.KryoException: Error constructing instance of class
yatw opened this issue · comments
I can't get a simple example working. It has problem getting back the User class from disk.
From README
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String path = getFilesDir().getPath();
String databaseName = "myDb";
String password = "passw0rd";
WaspDb db = WaspFactory.openOrCreateDatabase(path,databaseName,password);
WaspHash users = db.openOrCreateHash("users");
User p = new User();
users.put("user1", p);
TextView mytext = findViewById(R.id.mytext);
mytext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//List<User> allUsers = users.getAllValues(); // return null
List<String> keys = users.getAllKeys(); // return null
Log.i(TAG, keys.size()+"");
}
});
}
class User {
private String username;
private String email;
private String telephone;
//private Address address;
public User() {
}
}
Exception
W/System.err: com.esotericsoftware.kryo.KryoException: Error constructing instance of class: com.example.frontenddb.User
W/System.err: at com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy$2.newInstance(Kryo.java:1262)
at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1090)
at com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:570)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:546)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:790)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:161)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:39)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:686)
at net.rehacktive.waspdb.internals.collision.KryoStoreUtils.unserialize(KryoStoreUtils.java:101)
at net.rehacktive.waspdb.internals.collision.KryoStoreUtils.readFromDisk(KryoStoreUtils.java:68)
W/System.err: at net.rehacktive.waspdb.internals.collision.CollisionHash.getAllKeys(CollisionHash.java:103)
at net.rehacktive.waspdb.WaspHash.getAllKeys(WaspHash.java:95)
at com.example.frontenddb.MainActivity$1.onClick(MainActivity.java:39)
at android.view.View.performClick(View.java:7869)
at android.widget.TextView.performClick(TextView.java:14958)
at android.view.View.performClickInternal(View.java:7838)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29362)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8107)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
W/System.err: Caused by: java.lang.IllegalAccessException: java.lang.Class<com.example.frontenddb.User> is not accessible from java.lang.Class<com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy$2>
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy$2.newInstance(Kryo.java:1260)
... 24 more
java.lang.Exception:
ERROR on readFromDisk:Error constructing instance of class: com.example.frontenddb.User
at net.rehacktive.waspdb.internals.collision.KryoStoreUtils.readFromDisk(KryoStoreUtils.java:87)
W/System.err: at net.rehacktive.waspdb.internals.collision.CollisionHash.getAllKeys(CollisionHash.java:103)
at net.rehacktive.waspdb.WaspHash.getAllKeys(WaspHash.java:95)
at com.example.frontenddb.MainActivity$1.onClick(MainActivity.java:39)
at android.view.View.performClick(View.java:7869)
at android.widget.TextView.performClick(TextView.java:14958)
at android.view.View.performClickInternal(View.java:7838)
at android.view.View.access$3600(View.java:886)
at android.view.View$PerformClick.run(View.java:29362)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:8107)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
D/AndroidRuntime: Shutting down VM
User class need to have a public keyword