我的意思是在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;
}

最佳答案

使用android.util.base64可以将字节数组保存在sharedpreferences中。
储蓄:

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

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

07-25 21:25