Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在SharedReferences中存储ProtoBuf对象_Android_Sharedpreferences_Protocol Buffers - Fatal编程技术网

Android 在SharedReferences中存储ProtoBuf对象

Android 在SharedReferences中存储ProtoBuf对象,android,sharedpreferences,protocol-buffers,Android,Sharedpreferences,Protocol Buffers,我想在SharedReferences中存储ProtoBuf对象协议缓冲区仅允许从ByteString或字节数组进行解析。但是SharedReferences两者都不支持。我想知道是否有一种方法可以做到这一点,而不必先创建另一个可序列化模型并映射到它 我尝试过这种方法,但我得到了无效的ProtocolBufferException: public static void setProtoData(ProtoData data) { Prefs.putString(Constants.SH

我想在
SharedReferences
中存储
ProtoBuf
对象<代码>协议缓冲区仅允许从
ByteString
字节数组
进行解析。但是
SharedReferences
两者都不支持。我想知道是否有一种方法可以做到这一点,而不必先创建另一个可序列化模型并映射到它

我尝试过这种方法,但我得到了无效的ProtocolBufferException:

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在SharedReferences中保存字节数组

保存:

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

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