将 ProtoBuf 对象存储在 SharedPreferences 中

Store ProtoBuf object in SharedPreferences

我想在 SharedPreferences 中存储一个 ProtoBuf 对象。 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;
}

您可以使用 android.util.Base64.

在 SharedPreferences 中保存一个字节数组

节省:

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

待加载:

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