我正在获取一个JSON对象并使用AsyncTask中的GSON解析它。 之后,我将使用静态void的onPostExecute列表传递给我的活动中的静态列表。
然后,我遍历该列表并填写另一个列表。 在onCreate中,我将该列表调整为Spinner,并且选项显示,但我无法选择它们。
当我尝试使用该列表中的项目0时,它会给我IndexOutOfBounds - 索引0,大小0,或者它给我一个NullPointerException,具体取决于我正在做什么,但是微调器显示这些项目是现有的。如果我使用.add(“something”)添加元素,.size()返回1,但spinner显示更多元素。
以下是代码:
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, android.R.layout.simple_spinner_dropdown_item, cityList);
ArrayAdapter<String> stringAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countryList);
origin.setAdapter(adapter);
city.setAdapter(stringAdapter);
答案 0 :(得分:0)
您的AsyncTask在后台运行,因此当您从adapter
创建cityList
时,该列表为空。
尝试在adapter.notifyDataSetChanged()
方法的末尾调用spinner(List<City)
。
这与此无关,但如果您的任务被多次调用,最好在cityList.clear()
开始时调用spinner(List<City)
。