在SharedPreferences中存储ProtoBuf对象

3
我想将一个ProtoBuf对象存储在SharedPreferences中。但是Protocol Buffers只允许从ByteStringByte Array解析。但是SharedPreferences都不支持。我想知道是否有一种方法可以避免先创建另一个可序列化的模型并映射到它的方式。
我尝试了这种方式,但是我收到了InvalidProtocolBufferException的错误提示:
public static void setProtoData(ProtoData data) {
    Prefs.putString(Constants.SHARED_PREF_PROTO_DATA, String.valueOf(data.toByteString()));
}

public static ProtoData getProtoData() {
    String str = Prefs.getString(Constants.SHARED_PREF_PROTO_DATA, null);
    ProtoData data = null;

    try {
        data = ProtoData.parseFrom(ByteString.copyFromUtf8(str));
    } catch (InvalidProtocolBufferException e) {
        e.printStackTrace();
    }

    return data;
}
1个回答

4

通过使用android.util.Base64,您可以在SharedPreferences中保存字节数组。

保存方式如下:

String saveThis = Base64.encodeToString(array, Base64.DEFAULT);

加载:

byte[] array = Base64.decode(stringFromSharedPrefs, Base64.DEFAULT);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接