Получить ArrayList из SharedPrefernce - PullRequest
0 голосов
/ 05 августа 2020

У меня есть функция для сохранения и получения arrayylist в моем приложении, как показано ниже

public void saveArrayList(ArrayList<String> list, String key){

        Gson gson = new Gson();
        String json = gson.toJson(list);
        editor.putString(key, json);
        editor.apply();     // This line is IMPORTANT !!!
    }

    public ArrayList<String> getArrayList(String key){
        Gson gson = new Gson();
        String json = pref.getString(key, "");
        Type type = new TypeToken<ArrayList<String>>() {}.getType();
        return gson.fromJson(json, type);
    }

Я пытаюсь получить его в своем одном из фрагментов, как показано ниже

ArrayList<String> UserVideoLang;

и при создании как показано ниже

if (getActivity() != null) {
            customDialogBuilder = new CustomDialogBuilder(getActivity());
            parentViewModel = ViewModelProviders.of(getActivity()).get(HomeViewModel.class);
            sessionManager = new SessionManager(getActivity());
            UserVideoLang= sessionManager.getArrayList("UserVideoLang");
            if(UserVideoLang.isEmpty()){
                UserVideoLang.add("all");
            }
        }

, когда я запускаю, я получаю исключение NullPointerException в строке ниже

if(UserVideoLang.isEmpty()){

и полная ошибка, как показано ниже

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.isEmpty()' on a null object reference
        at com.vedagames.wowtok.view.home.ForUFragment.onActivityCreated

Сообщите мне, что Мне не хватает информации, и как это исправить, спасибо!

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Sharedpref используется для тех же небольших данных для приложения. Я не знаю размера arraylist и одного или нескольких arraylist. Если ваши данные большие, вы должны выбрать базу данных комнат для сохранения данных. Вы можете проверить комнату по ссылке по этой ссылке.

ИЛИ, для нулевой проверки сначала проверьте

UserVideoLang != null

затем проверьте

UserVideoLang.isEmpty()

Если есть проблема с синтаксическим анализом Gson на объект класса, вы можете использовать для этого более простой метод. Как ...

UserVideoLangContainer container = new Gson().fromJson(userInfo, UserVideoLangContainer.class);

Где UserVideoLangContainer.class похож на

public class UserVideoLangContainer implements Serializable {
    public List<String> list;
}
0 голосов
/ 05 августа 2020

Замените свой метод getArrayList на этот

public ArrayList<String> getArrayList(String key){
        Gson gson = new Gson();
        String json = pref.getString(key, "[]");
        Type type = new TypeToken<ArrayList<String>>() {}.getType();
        return gson.fromJson(json, type);
    }

передача значения по умолчанию [] означает пустой массив JSON. поэтому, если значение в общем предпочтении не будет возвращено, будет возвращен пустой список массивов.

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