Я не могу написать метод для получения набора строк из SharedPref

#java #android #list

#java #Android #Список

Вопрос:

Я столкнулся с проблемой, и, возможно, вы, ребята, сможете мне помочь. Я создаю приложение для списка покупок для Android. В приведенном ниже коде все работает:

 List<String> list,listRecipe;
ListView listView,listViewRecipe;
ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    getArrayList();
    listView = (ListView) findViewById(R.id.listView);
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
    listView.setAdapter(adapter);
}

public void getArrayList(){
    SharedPreferences sharedPreferences = getSharedPreferences("Data", MODE_PRIVATE);
    Set<String> mySetdownloaded = sharedPreferences.getStringSet("List", NotFoundSet());
    if (mySetdownloaded.size() == 0){
        list =  new ArrayList<>();
    }
    else {
        list = new ArrayList<>(sharedPreferences.getStringSet("List", NotFoundSet()));
    }
}
  

Но когда я вношу изменения в свой метод getArrayList, чтобы я мог использовать его не только с одним СПИСКОМ, но и с другими (добавленный аргумент), он не работает. Я просто получаю «Приложение перестало работать» при запуске

 List<String> list,listRecipe;
ListView listView,listViewRecipe;
ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    getArrayList(list);
    listView = (ListView) findViewById(R.id.listView);
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
    listView.setAdapter(adapter);
}

public void getArrayList(List<String> lists){
    SharedPreferences sharedPreferences = getSharedPreferences("Data", MODE_PRIVATE);
    Set<String> mySetdownloaded = sharedPreferences.getStringSet("List", NotFoundSet());
    if (mySetdownloaded.size() == 0){
        lists =  new ArrayList<>();
    }
    else {
        lists = new ArrayList<>(sharedPreferences.getStringSet("List", NotFoundSet()));
    }
}
  

Ответ №1:

Во втором snnipet вы вызываете getArrayList(list) , но getArrayList() ничего не возвращает. И после того, как вы попытаетесь вызвать list at

 adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
  

но list это ничего, даже null, так что вы получите nullpointerexception и сбой вашего приложения… Вы должны, по крайней мере, getArrayList вернуть что-то и присвоить атрибуту list , ИЛИ вы не передаете list в качестве аргумента, а пытаетесь получить к нему доступ как this.list вместо lists этого.

Ответ №2:

Мой окончательный рабочий код:

 public List<String> getArrayList(String nameOfSavedFile) {

    List<String> list;
    SharedPreferences sharedPreferences = getSharedPreferences("Data", MODE_PRIVATE);
    Set<String> mySetdownloaded = sharedPreferences.getStringSet(nameOfSavedFile, NotFoundSet());
    if (mySetdownloaded.size() == 0) {
        list = new ArrayList<>();
        return list;
    } else {
        list = new ArrayList<>(sharedPreferences.getStringSet(nameOfSavedFile, NotFoundSet()));
        Collections.sort(list);
        return list;
    }

}
  

Спасибо за помощь;)