填充后列表为空,但微调器显示它有字符串

时间:2014-04-30 17:37:43

标签: java android list

我正在获取一个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);

1 个答案:

答案 0 :(得分:0)

您的AsyncTask在后台运行,因此当您从adapter创建cityList时,该列表为空。 尝试在adapter.notifyDataSetChanged()方法的末尾调用spinner(List<City)

这与此无关,但如果您的任务被多次调用,最好在cityList.clear()开始时调用spinner(List<City)