有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

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