java - tutorial - Est-il possible d'enregistrer un tableau JSON dans SharedPreferences?



sharedpreferences tutorial (5)

Cela dépend de la taille du tableau. En supposant que ce ne soit pas ridiculement grand (moins de quelques centaines de Ko), stockez-le simplement dans les préférences partagées. Si c'est plus grand que cela, vous pouvez l'enregistrer dans un fichier.

https://code.i-harness.com

J'ai un tableau JSON que je dois enregistrer. Je pensais à le sérialiser, mais serait-il préférable de simplement l'enregistrer sous forme de chaîne dans SharedPreferences, puis de le reconstruire lorsque je devrais le lire?


Enregistrez le JSON directement. Regardez-le de cette façon: vous encapsulez la représentation des données. Si vous avez sérialisé un format d'objet spécifique, vous ne pouvez plus gérer cet objet ou gérer les modifications éventuelles de cet objet et vous soucier de la mise à niveau d'un ancien format de sérialisation vers un nouveau. En le sauvant en tant que JSON, vous pouvez le gonfler comme vous le souhaitez.


J'ai fait la même tâche sans utiliser gson.

 SharedPreferences.Editor editor=sharedPreferences.edit();
                       editor.putString(app.KEY, String.valueOf(jsonArray));
                        editor.putBoolean(app.LOGGEDIN_SHARED_PREF,true);
                        editor.commit();

de cette façon j'ai sauvé toute la réponse de json dans les préférences partagées, la réponse de json a id, nom, adresse, phone..etc maintenant si je veux obtenir seulement le nom des préférences, comment puis-je faire cela.


L'objet JSON en Java n'implémente pas serialaizable prêt à l'emploi. J'ai vu d'autres personnes étendre la classe pour permettre cela, mais pour votre situation, je recommanderais simplement de stocker l'objet JSON en tant que chaîne et en utilisant sa fonction toString (). J'ai eu du succès avec ça.

editor.putString("jsondata", jobj.toString());

Et pour le récupérer:

String strJson = sharedPref.getString("jsondata","0");//second parameter is necessary ie.,Value to return if this preference does not exist. 

if (strJson != null) {
           try {
               JSONObject response = new JSONObject(strJson);

         } catch (JSONException e) {

         }
  }

http://developer.android.com/reference/org/json/JSONObject.html#JSONObject(java.lang.String)


pour enregistrer le tableau json en préférence partagée, vous pouvez utiliser la méthode en classe comme suit

public class CompanyDetails {

@SerializedName("id")
private String companyId;

public String getCompanyId() {
    return companyId;
}
}

dans la classe de préférence partagée

public static final String SHARED_PREF_NAME = "DOC";
public static final String COMPANY_DETAILS_STRING = "COMPANY_DETAIL";
public static final String USER_DETAILS_STRING = "USER_DETAIL";

public static void saveCompanyDetailsSharedPref(Context mContext, CompanyDetails companyDetails){
    SharedPreferences mPrefs = mContext.getSharedPreferences(SHARED_PREF_NAME,Context.MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = mPrefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(companyDetails);
    prefsEditor.putString(COMPANY_DETAILS_STRING, json);
    prefsEditor.commit();
}

public static CompanyDetails getCompanyDetailsSharedPref(Context mContext){
    SharedPreferences mPrefs = mContext.getSharedPreferences(SHARED_PREF_NAME,Context.MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = mPrefs.edit();
    Gson gson = new Gson();
    String json = mPrefs.getString(COMPANY_DETAILS_STRING, "");
    if(json.equalsIgnoreCase("")){
        return null;
    }
    CompanyDetails obj = gson.fromJson(json, CompanyDetails.class);
    return obj;
}

appeler la valeur

 private CompanyDetails companyDetails;
 companyDetails = shared_class.getCompanyDetailsSharedPref(mContext);
 companyDetails.getCompanyId()




sharedpreferences