我想抽象對象保存到共享preferences.I與字符串從共享偏好獲取數據,並在將其綁定到一個抽象類,我得到的是 "Caused by: java.lang.InstantiationException: Can't instantiate abstract class"
如何描述對象保存到共享偏好的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