setAdapter在AsyncTask中未定义

时间:2014-03-06 20:06:08

标签: android listview android-asynctask

所以我正在制作一个应用程序,其中MainActivity主要基于ListView(事实上,这就是所有的MainActivity。)所以我从ListActivity扩展了我的MainActivity。问题是,我正在尝试从AsyncTask内部更新我的UI线程,它给我一个错误,上面写着The method setAdapter(ArrayAdapter<String>) is not defined for the type MainActivity.GetContactInfo

所以我想知道如何定义setAdapter。如果我必须实际实例化ListView项,我将实例化哪个ListView项?我正在尝试为ListView创建自定义布局,所以我使用的是list_item xml文件,而我的activity_main.xml文件中只有一个ListView,所以我不认为我会抓住ListView来实例化ListView。

如何简单地让setAdapter工作而不需要连接到ListView的任何帮助都会很有帮助(因为我从ListView扩展了我的类,所以我不必将它附加到ListView就是我看到的。)

提前致谢。

编辑:AsyncTask代码:

    private class GetContactInfo extends AsyncTask<String, Void, ContactInfo[]> {

    @Override
    protected ContactInfo[] doInBackground(String... url) {
        URL json = null;

        try {
            json = new URL(url[0]);
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }

        try {
            contacts = mapper.readValue(json, ContactInfo[].class);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return contacts;
    }

    @Override
    protected void onPostExecute(ContactInfo[] result) {
        int length = result.length;
        ArrayList<String> names = new ArrayList<String>();

        for (int i = 0; i < length; i++) {
            names.add(result[i].getName());
        }

        adapter = new ArrayAdapter<String>(local, R.layout.list_item, R.id.contactName, names);

        setAdapter(adapter);
    }

}

1 个答案:

答案 0 :(得分:1)

setAdapter()方法属于ListView对象。如果已从ListActivity进行扩展,则需要使用setListAdapter(ArrayAdapter)。 ListActivity定义setListAdapter()方法,而ListView对象定义setAdapter方法。

将setAdapter()更改为setListAdapter(),这将有效。