2017-08-29 97 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);