【问题标题】:How to save Abstract object to Shared Preferences Android如何将抽象对象保存到共享首选项 Android
【发布时间】:2018-02-06 14:18:31
【问题描述】:

我想将抽象对象保存到共享首选项中。我从共享首选项中使用字符串获取数据,当将其绑定到抽象类时,出现类似的错误 "Caused by: java.lang.InstantiationException: Can't instantiate abstract class"

如何从共享偏好中获取抽象对象?

谢谢

【问题讨论】:

  • 您无法创建抽象对象,这就是您无法保存它的原因。这就是 Java 的工作原理(与大多数其他语言相同)。从那个抽象类扩展,实现所有抽象方法,然后你就可以创建实例了。
  • 共享首选项不是所有内容的通用存储,但您可以提取对象值并形成 JSON 或 XAML 字符串结构并存储它。如何进行序列化/反序列化取决于您。

标签: android sharedpreferences abstract-class


【解决方案1】:

首先,您不能从 java 中的抽象类创建实例。你需要做这样的事情

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);

【讨论】:

    【解决方案2】:

    对于您的错误:您无法创建抽象类的对象,您必须将抽象类继承给某个类,然后才能为它创建一个对象。

    另一个是,您不能将对象存储在共享首选项中。只能存储 String、Integer、Boolean、Float、Long 和 StringSet。

    更多信息在这里。https://developer.android.com/reference/android/content/SharedPreferences.html

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 2016-01-17
      • 2013-09-20
      • 2017-12-02
      • 1970-01-01
      • 2014-01-16
      • 2013-10-18
      • 2011-12-18
      相关资源
      最近更新 更多