2017-08-29 65 views
0

我想抽象对象保存到共享preferences.I与字符串从共享偏好获取数据,并在将其绑定到一个抽象类,我得到的是 "Caused by: java.lang.InstantiationException: Can't instantiate abstract class"如何描述对象保存到共享偏好的Android

一些错误

如何从共享首选项获取抽象对象?

感谢

+0

你不能创建一个抽象对象,这就是为什么你不能保存它。这就是Java的工作原理(与其他语言的大部分相同)。从该抽象类扩展,实现所有抽象方法,然后您将能够创建实例。 –

+0

Shared Preference不是一个通用的存储空间,但是您可以提取Object值并形成JSON或XAML字符串结构并将其存储起来。这取决于你如何进行序列化/反序列化。 – Enzokie

回答

0

首先,你不能从Java中的抽象类创建intance。你需要做这样的事情

public MyRealClass extends MyAbstractClass{ 

} 

你的IDE现在应该告诉你,你需要从抽象类实现所需的方法。

可以的MyRealClass实例现在保存到SharedPreferences但只有当你让它序列化或使对象的JSON字符串。这可以通过使用库如GSON来完成。 直接将对象保存到SharedPrefs是不可能的。

GSON将带您的实例并将其转换为字符串。这个字符串可以保存,以后如果你再次需要这个对象,你可以把字符串赋给GSON,它会将它转换回对象。所用的表达方式被称为JSON,这是一个标准格式(https://en.wikipedia.org/wiki/JSON

为了节省

Gson gson = new Gson(); 
String json = gson.toJson(myRealClassInstance); 
prefsEditor.putString("myobj", json); 
prefsEditor.commit(); 

稍后加载

Gson gson = new Gson(); 
String json = mPrefs.getString("myobj", ""); 
MyRealClass obj = gson.fromJson(json, MyRealClass.class);