为了账号安全,请及时绑定邮箱和手机立即绑定

以共享首选项存储和检索类对象

以共享首选项存储和检索类对象

绝地无双 2019-08-12 10:42:39
以共享首选项存储和检索类对象在Android中,我们可以在共享首选项中存储类的对象,并在以后检索该对象吗?如果有可能怎么办?如果不可能做到这一点的其他可能性是什么?我知道序列化是一种选择,但我正在寻找使用共享偏好的可能性。
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

不可能。

您只能在SharedPrefences SharePreferences.Editor中存储简单值

您需要保存什么特别的课程?


查看完整回答
反对 回复 2019-08-12
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我们可以使用Outputstream将Object输出到内部存储器。并转换为字符串然后保存优先。例如:

    mPrefs = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor ed = mPrefs.edit();
    ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();

    ObjectOutputStream objectOutput;
    try {
        objectOutput = new ObjectOutputStream(arrayOutputStream);
        objectOutput.writeObject(object);
        byte[] data = arrayOutputStream.toByteArray();
        objectOutput.close();
        arrayOutputStream.close();

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        Base64OutputStream b64 = new Base64OutputStream(out, Base64.DEFAULT);
        b64.write(data);
        b64.close();
        out.close();

        ed.putString(key, new String(out.toByteArray()));

        ed.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }

当我们需要从Preference中提取Object时。使用以下代码

    byte[] bytes = mPrefs.getString(indexName, "{}").getBytes();
    if (bytes.length == 0) {
        return null;
    }
    ByteArrayInputStream byteArray = new ByteArrayInputStream(bytes);
    Base64InputStream base64InputStream = new Base64InputStream(byteArray, Base64.DEFAULT);
    ObjectInputStream in;
    in = new ObjectInputStream(base64InputStream);
    MyObject myObject = (MyObject) in.readObject();


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 406 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信