java列表在填充后为空,但微调器显示它有字符串
我正在获取一个JSON对象,并在AsyncTask中使用GSON对其进行解析。 之后,我使用静态void将列表从onPostExecute传递到活动中的静态列表
然后,我迭代该列表并填写另一个列表。 在onCreate中,我将该列表调整为微调器,并显示选项,但无法选择它们
当我尝试使用该列表中的项0时,它会给我INDEXOUTFBOUNDS-索引0,大小为0,或者它给我一个NullPointerException,这取决于我正在执行的操作,但微调器会将这些项显示为存在。如果我使用添加元素。加上(“某物”)。size()返回1,但微调器显示更多元素
代码如下:
public List<City> fetchedList = new ArrayList<City>(); //List that was fetched from JSO
public List<String> cityList = new ArrayList<String>(); //List of cities derived from fetched list using getCity();
public static String[] countryList; //List that is fetched from strings.xml array
//Called from onPostExecute to fill cityList with cities
public void spinner(List<City> lista) {
fetchedList = lista;
for (City element : fetchedList) { //For each City
cityList.add(element.getCity()); //Get city name and put it into our list
} }
以下是onCreate部分:
CityFetcher fetch = new CityFetcher(); // Do our asyncTask here
fetch.execute(); // Run Forrest, run!
countryList = getResources().getStringArray(R.array.countries);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 安卓.R.layout.simple_spinner_dropdown_item, cityList);
ArrayAdapter<String> stringAdapter = new ArrayAdapter<String>(this, 安卓.R.layout.simple_spinner_dropdown_item, countryList);
origin.setAdapter(adapter);
city.setAdapter(stringAdapter);
# 1 楼答案
AsyncTask在后台运行,因此当您从
cityList
创建adapter
时,该列表为空。 尝试在spinner(List<City)
方法的末尾调用adapter.notifyDataSetChanged()
这是不相关的,但是如果您的任务被多次调用,最好在
spinner(List<City)
开始时调用cityList.clear()