gson 将ArrayList〈自定义对象>保存到本地存储

7nbnzgx9  于 2022-11-23  发布在  其他
关注(0)|答案(4)|浏览(236)

哦,天哪,我花了一个小时左右的时间在Android首选项和本地存储中阅读和尝试不同的存储Parcelable Object的方法,现在我又回到了原点。顺便说一下,我已经下载并导入了Gson,但我不能让它工作。
基本上,我在一个名为taskListArrayList<>中有一个名为Task的类,即使用户关闭了我的应用程序,我也需要保存它。Object由一个String、一些Ints一些Booleans和类SubtaskArrayList,如果这有关系的话。重要的是我似乎不能把它写成一个字符串列表,并且它们都是可序列化的,而不是可打包的。

**EDIT:**谢谢您的建议,但是我实现了Parcelable,以便在活动之间打包列表中的特定对象。

kq0g1dla

kq0g1dla1#

根据Parcelable API

**Parcelable:**其示例可以写入Parcel或从Parcel还原的类的接口。

Parcel API中阅读:

**Parcel不是通用序列化机制。**此类(以及用于将任意对象放入Parcel中的相应Parcelable API)设计为高性能IPC传输。因此,不适合将任何Parcel数据放入永久存储中:包中任何数据的底层实现中的更改都可能使较旧的数据不可读。

因此,如果你想通过ArrayList存储所有不同类型的引用,你必须将所有对象 Package 到一个公共接口中,在这种情况下,Serializable是你的朋友。
还有,根据你的问题:
我需要保存,即使我的用户关闭了我的应用程序。
如果您查看android生命周期,您将看到您需要在onStop()中执行此操作,当您的Activity不再对用户可见时,将调用此操作。

您也可以参考此答案了解更多信息Shared preferences for creating one time activity

mw3dktmi

mw3dktmi2#

我们可以保存自定义数组列表并使用SharedPreference获取它

  • 用于将数组列表值设置为SharedPreference
public void SaveArrayList(ArrayList<CustomObj> listArray){
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = prefs.edit();
        Gson gson = new Gson();
        String json = gson.toJson(listArray);
        editor.putString("TAG_LIST", json);  ///"TAG_LIST" is a key must same for getting data 
        editor.apply();     
    }
  • 用于从SharedPreference获取数组列表
public ArrayList<CustomObj> getArrayList(){
      SharedPreferences prefs = 
        PreferenceManager.getDefaultSharedPreferences(getContext());
            Gson gson = new Gson();
            String json = prefs.getString("TAG_LIST", null);
            Type listType = new TypeToken<ArrayList<CustomObj>>() {}.getType();
            mSomeArraylist= gson.fromJson(json, listType);
        return gson.fromJson(json, listType);
}
knsnq2tg

knsnq2tg3#

您可以将自定义对象转换为Json格式作为一个字符串并存储在SharedPreference中。
已更新
例如,您的自定义对象为Employee

public class Employee
{

    private String name = "test";
    private int age = 29;

    @Override
    public String toString()
    {
        return "Employee [age=" + age + ", name=" + name + "]";
    }
}

在Activity中,您可以将Java对象转换为String

Gson gson = new Gson();
Employee m_employee = new Employee();
String str = gson.toJson(m_employee);
System.out.println("===== " + str);

当用户关闭应用程序时,可以将str存储在SharedPreference中当用户打开应用程序时,从SharedPreference获取

zynd9foi

zynd9foi4#

您可以尝试以下操作:

FileOutputStream fout = new FileOutputStream("c:\\object.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(yourObject);

有关详细信息,请参阅此链接:-Here

相关问题