如何描述对象保存到共享偏好的Android
问题描述:
我想抽象对象保存到共享preferences.I与字符串从共享偏好获取数据,并在将其绑定到一个抽象类,我得到的是 "Caused by: java.lang.InstantiationException: Can't instantiate abstract class"
如何描述对象保存到共享偏好的Android
如何从共享首选项获取抽象对象?
感谢
答
首先,你不能从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);
答
您的错误:无法创建对象的抽象类,你必须继承抽象类到某个类,然后只有你可以创建一个对象。
另一个是,您不能以共享首选项存储对象。你只能存储String,Integer,Boolean,Float,Long和StringSet。
更多的信息在这里。 https://developer.android.com/reference/android/content/SharedPreferences.html
你不能创建一个抽象对象,这就是为什么你不能保存它。这就是Java的工作原理(与其他语言的大部分相同)。从该抽象类扩展,实现所有抽象方法,然后您将能够创建实例。 –
Shared Preference不是一个通用的存储空间,但是您可以提取Object值并形成JSON或XAML字符串结构并将其存储起来。这取决于你如何进行序列化/反序列化。 – Enzokie