Android ArrayList пользовательских объектов-сохранить в SharedPreferences-сериализуемый?


У меня есть ArrayList объекта. Объект содержит типы 'Bitmap' и 'String', а затем просто геттеры и сеттеры для обоих. Прежде всего, является ли растровое изображение сериализуемым?

Как бы я мог сериализовать это, чтобы сохранить его в SharedPreferences? Я видел, как многие люди задают подобный вопрос, но ни один из них не дает хорошего ответа. Я бы предпочел некоторые примеры кода, если это вообще возможно.

Если растровое изображение не сериализуется, то как мне сохранить это ArrayList?

большое спасибо.

5 63

5 ответов:

Да, вы можете сохранить свой составной объект в общие предпочтения. Скажем так..

 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);

ответ выше работает, но не для списка:

для сохранения списка объектов сделайте так:

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);

для меня это работало так:

поместите значения в 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());

Для Спасения:

public static void saveSharedPreferencesLogList(Context context, List<PhoneCallLog> callLog) {
    SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = mPrefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(callLog);
    prefsEditor.putString("myJson", json);
    prefsEditor.commit();
}

для загрузки:

public static List<PhoneCallLog> loadSharedPreferencesLogList(Context context) {
    List<PhoneCallLog> callLog = new ArrayList<PhoneCallLog>();
    SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
    Gson gson = new Gson();
    String json = mPrefs.getString("myJson", "");
    if (json.isEmpty()) {
        callLog = new ArrayList<PhoneCallLog>();
    } else {
        Type type = new TypeToken<List<PhoneCallLog>>() {
        }.getType();
        callLog = gson.fromJson(json, type);
    }
    return callLog;
}

PhoneCallLog-это имя моего пользовательского объекта. (Содержит строковые, длинные и логические значения)

напишите код в общих настройках:

public class MySharedPrefernce {

        private Context context;
        private String PREF_NAME = "UserPreference";
        private int PRIVATE_MODE = 0;
        private SharedPreferences preferences;
        private SharedPreferences.Editor editor;
        private DataKey = "CART_RESTAURANTS";

        //constructor
        public MySharedPrefernce(Context context) {
            this.context = context;
            this.preferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
            editor = preferences.edit();
        }

        //add data
        public void saveRestaurantToSharedPrefs(List<CartRestaurantModel> cartRestaurantModel) {
            Gson gson = new Gson();
            String jsonCart = gson.toJson(cartRestaurantModel);
            editor.putString(DataKey, jsonCart);
            editor.commit();
        }

        //get data
        public ArrayList<CartRestaurantModel> getRestaurantToSharedPrefs() {
            List<CartRestaurantModel> cartData;
            if (preferences.contains(DataKey)) {
                String jsonCart = preferences.getString(DataKey, null);
                Gson gson = new Gson();
                CartRestaurantModel[] cartItems = gson.fromJson(jsonCart,
                        CartRestaurantModel[].class);

                cartData = Arrays.asList(cartItems);
                cartData = new ArrayList<CartRestaurantModel>(cartData);
            } else {
                try {
                    return new ArrayList<CartRestaurantModel>();
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            }
            return (ArrayList<CartRestaurantModel>) cartData;
        }

        //clear data
        public void clearRestaurantSharedPrefsData() {
            editor.clear();
            editor.commit();
        }
}

написать код в вашей деятельности/фрагмент для хранения и извлечения :

public List<CartRestaurantModel> cartRestaurantModel = new ArrayList<CartRestaurantModel>();  // to maintain restaurant for cart menus

В Магазине :

new MySharedPrefernce(this).saveRestaurantToSharedPrefs(cartRestaurantModel);

Для Получения :

cartRestaurantModel = new MySharedPrefernce(this).getRestaurantToSharedPrefs();