#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;
}
}
Спасибо за помощь;)