将 ProtoBuf 对象存储在 SharedPreferences 中
Store ProtoBuf object in SharedPreferences
我想在 SharedPreferences
中存储一个 ProtoBuf
对象。 Protocol Buffers
只允许从 ByteString
或 Byte 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);
我想在 SharedPreferences
中存储一个 ProtoBuf
对象。 Protocol Buffers
只允许从 ByteString
或 Byte 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);