79

オブジェクトのArrayListがあります。オブジェクトには、タイプ「ビットマップ」と「文字列」が含まれ、その後、両方のゲッターとセッターのみが含まれます。まず第一に、ビットマップはシリアル化可能ですか?

これをシリアル化してSharedPreferencesに保存するにはどうすればよいですか?多くの人が同じような質問をするのを見てきましたが、良い答えを出す人はいないようです。可能であれば、いくつかのコード例をお勧めします。

ビットマップがシリアル化できない場合、このArrayListを保存するにはどうすればよいですか?

4

7 に答える 7

149

はい、複合オブジェクトを共有設定に保存できます。まあ言ってみれば..

 Student mStudentObject = new Student();
 SharedPreferences appSharedPrefs = PreferenceManager
             .getDefaultSharedPreferences(this.getApplicationContext());
 Editor prefsEditor = appSharedPrefs.edit();
 Gson gson = new Gson();
 String json = gson.toJson(mStudentObject);
 prefsEditor.putString("MyObject", json);
 prefsEditor.commit(); 

..これで、オブジェクトを次のように取得できます。

 SharedPreferences appSharedPrefs = PreferenceManager
             .getDefaultSharedPreferences(this.getApplicationContext());
 Gson gson = new Gson();
 String json = appSharedPrefs.getString("MyObject", "");
 Student mStudentObject = gson.fromJson(json, Student.class);

詳細については、ここをクリックしてください。

ArrayListなどの任意のタイプのオブジェクトを取得したい場合はStudent、次を使用します。

Type type = new TypeToken<List<Student>>(){}.getType();
List<Student> students = gson.fromJson(json, type);
于 2013-02-21T20:48:49.780 に答える
123

上記の答えは機能しますが、リストでは機能しません:

オブジェクトのリストを保存するには、次のようにします。

List<Cars> cars= new ArrayList<Cars>();
    cars.add(a);
    cars.add(b);
    cars.add(c);
    cars.add(d);

    gson = new Gson();
    String jsonCars = gson.toJson(cars);
    Log.d("TAG","jsonCars = " + jsonCars);

json オブジェクトを読み取ります。

Type type = new TypeToken<List<Cars>>(){}.getType();
List<Cars> carsList = gson.fromJson(jsonCars, type);
于 2014-02-25T15:56:08.303 に答える
25

私にとっては、次のように機能しました:

SharedPreferances に値を入れます:

String key = "Key";
ArrayList<ModelClass> ModelArrayList=new ArrayList();

SharedPreferences shref;
SharedPreferences.Editor editor;
shref = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

Gson gson = new Gson();
String json = gson.toJson(ModelArrayList);

editor = shref.edit();
editor.remove(key).commit();
editor.putString(key, json);
editor.commit();

SharedPreferances から値を取得するには:

Gson gson = new Gson();
String response=shref.getString(key , "");
ArrayList<ModelClass> lstArrayList = gson.fromJson(response, 
    new TypeToken<List<ModelClass>>(){}.getType());
于 2016-10-25T10:09:56.587 に答える
0

解決

あなたが私のコードに従うことができることを心配しないでください.私はsharedPreferenceの任意のタイプのリストを保持するためにsharedPreferenceの独自のカスタムクラスを使用しています.

public class AuthPreference {
    private static final String MY_PREFERENCES = "MY_PREFERENCES";
    private static final int MODE = Context.MODE_PRIVATE;
    private static AuthPreference pref;
    private final SharedPreferences sharedPreference;
    private final SharedPreferences.Editor editor;

    @SuppressLint("CommitPrefEdits")
    public AuthPreference(Context context) {
        sharedPreference = context.getSharedPreferences(MY_PREFERENCES, MODE);
        editor = sharedPreference.edit();
    }

    public void clear() {
        editor.clear().commit();

    }

    //Here  save your api responce like YourModel arraylist

    public void saveDataResponce(ArrayList<YourModel> model_, String key) {
        SharedPreferences.Editor editor = sharedPreference.edit();
        Gson gson = new Gson();
        String json = gson.toJson(model_);
        editor.putString(key, json);
        editor.apply();
    }

//Here we get our api responce like YourModel arraylist.Using key value when you want to define.

    public ArrayList<YourModel> getDataResponce(String key) {
        Gson gson = new Gson();
        String json = sharedPreference.getString(key, null);
        Type type_ = new TypeToken<ArrayList<YourModel>>() {
        }.getType();
        return gson.fromJson(json, type_);
    }
}
于 2021-04-07T09:17:08.030 に答える