ListView在AsyncTask类中不起作用

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

标签: android android-asynctask rss

在下面的代码中,列表视图不显示来自RSS Feed的文本:

public class MainActivity extends ListActivity {

ArrayList<String> values = new ArrayList<>();
ArrayList<String> tags = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState)  {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        URL url = new URL("http://appline.ir/index.php/android.feed?limitstart=");
        new Connect(url).execute();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
private class Connect extends AsyncTask <Void, String, String>
{

    URL url;
    ProgressDialog diao;
    Connect(URL url)
    {
        this.url = url;
    }

    @Override
    protected void onPostExecute(String result) 
    {
        super.onPostExecute(result);
        diao.hide();
        setListAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, values));
    }

    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        diao = new ProgressDialog(MainActivity.this);
        diao.setMessage("connecting...");
        diao.setIndeterminate(true);
        diao.show();
    }

    @Override
    protected String doInBackground(Void... params) 
    {
        try
        {
            XmlPullParserFactory parser =XmlPullParserFactory.newInstance();
            XmlPullParser xml = parser.newPullParser();
            URL url = new URL("http://appline.ir/index.php/android.feed?limitstart=");
            XmlParser p = new XmlParser(url);
            tags = p.parse();
            InputStream input = url.openStream();
            xml.setInput(input,null);
            int event;
            String text = null;
            try {
                event = xml.getEventType();
                while (event != XmlPullParser.END_DOCUMENT)
                {
                    String name=xml.getName();
                    switch (event)
                    {
                    case XmlPullParser.START_TAG:
                        break;
                    case XmlPullParser.TEXT:
                        text = xml.getText();
                        break;
                    case XmlPullParser.END_TAG:
                        if(name.equals("title")){
                            values.add(text);
                        }
                        else if(name.equals("link")){   
                            //                        link = text;
                        }
                        else if(name.equals("description")){
                            //                        description = text;
                        }
                        else{
                        }
                        break;
                    }        
                    event = xml.next(); 
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        catch(Exception e)
        {

        }

        return null;

    }

}
}

但是当我将Xml解析部分放入MainActivity(使用StrictMode)时,列表会正确显示文本。 我找不到问题。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您必须在notifyDataSetChanged()上致电Adapter,并且必须在UI主线程中调用

答案 1 :(得分:0)

尝试将适配器对象分配给变量并调用notifyDataSetChanged()

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);
        adapter.notifyDataSetChanged();