переопределить arraylist в общих настройках - PullRequest
0 голосов
/ 23 декабря 2018

Я сохраняю массив данных в общих настройках, но когда я добавляю что-то новое в этот массив, он удаляет старый и отображает только новый.

Вот массив сохранения и загрузки из общих настроек

//SHARED PREFERENCES Save ArrayList
public boolean saveArrayList(SharedListFood list) {
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list.getMlist()); //put in json the list from my model(SharedFoodList) which is the list i provide(itemsAdded)
    editor.putString("testShared", json);
    return editor.commit();     // This line is IMPORTANT !!!
}

//SHARED PREFERENCES Load ArrayList
public ArrayList<String> getArrayList() {

    ArrayList<String> loadArrayList;

    Gson gson = new Gson();
    String json = prefs.getString("testShared", null);
    Type type = new TypeToken<ArrayList<String>>() {
    }.getType();
    loadArrayList = gson.fromJson(json, type);

    return loadArrayList;

}

Я добавляю элемент сюда.

   searchList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                searchMessage = searchList.getItemAtPosition(position).toString(); //searchMessage gets the value of the pressed item in list

                if(searchMessage.contains("two")){
                    Log.d("alekos","tak"+searchMessage);
                }
                Toast.makeText(AddFood.this, "" + searchMessage, Toast.LENGTH_SHORT).show();

                itemsAdded.add(searchMessage);// made it static so it is created here but displayed in the AddFoodBasket.java
         sharedArray=new SharedListFood(itemsAdded);

                boolean isSuccess= sharedArrayPreferencesHelper.saveArrayList(sharedArray); //sends itemsAdded to saveArrayList in shared preferences
                if (isSuccess) {
                    Toast.makeText(getApplicationContext(),"Personal information saved", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(),"Personal information NOT", Toast.LENGTH_LONG).show();
                }
            }
        });

Где itemsAdded - массив, который я хочу добавлять каждый раз

1 Ответ

0 голосов
/ 23 декабря 2018

Насколько я понимаю,
1. Вы написали SharedPreferences.Editor внутри saveArrayList().
2. При каждом вызове этого метода вы создаете новый редактор, а он заменяет предыдущий.
3. SharedPreferences хранится в паре ключ-значение, и вы каждый раз сохраняете данные в одном и том же ключе.(Заменяет предыдущие значения новыми)
4. Ваш код может быть верным для данных, но поток неверен.Попробуйте поработать над потоком кода.
Надеюсь, это поможет.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...