2017-07-08 2 views
2

Ich beabsichtige, ein ProtoBuf Objekt in SharedPreferences zu speichern. Protocol Buffers erlauben nur das Parsen von ByteString oder Byte Array. Aber SharedPreferences unterstützen weder. Ich habe mich gefragt, ob es einen Weg gibt, dies zu tun, ohne ein weiteres serialisierbares Modell erstellen und es zuerst zuordnen zu müssen.Store ProtoBuf-Objekt in SharedPreferences

habe ich versucht, auf diese Weise, aber ich bekomme 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; 
} 

Antwort

2

Sie können mit android.util.Base64 ein Byte-Array in SharedPreferences speichern.

Zum Speichern:

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

Zum Laden:

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