2017-07-08 64 views
2

我的意思是在SharedPreferences中存儲ProtoBuf對象。 Protocol Buffers只允許解析ByteStringByte Array。但支持SharedPreferences。我想知道是否有辦法做到這一點,而不必創建另一個可序列化的模型並首先映射到它。在SharedPreferences中存儲ProtoBuf對象

我試過這種方法,但我得到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; 
} 

回答

2

您可以通過使用android.util.Base64在SharedPreferences保存的字節數組。

保存:

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

對於加載:

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