2017-07-08 3 views
2

Je veux stocker un objet ProtoBuf dans SharedPreferences. Protocol Buffers autorise uniquement l'analyse à partir de ByteString ou Byte Array. Mais SharedPreferences ne supportent ni l'un ni l'autre. Je me demandais s'il y avait un moyen de le faire sans avoir à créer un autre modèle sérialisable et à le mapper en premier.Enregistrer l'objet ProtoBuf dans SharedPreferences

moi avons essayé de cette façon, mais je reçois 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; 
} 

Répondre

2

Vous pouvez enregistrer un tableau d'octets dans SharedPreferences en utilisant android.util.Base64.

Pour économiser:

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

Pour le chargement:

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