0

直到昨天它运行得非常好......我是android编程的新手,任何帮助都会很棒......在我的应用程序中,我正在解析下载的xml文件,然后创建一个动态UI......这是我的代码片段..

private class ParseXML extends AsyncTask<Integer, Integer, Document>{

    public void onPostExecute(Document d) {


        ParseDocument(d); }



    @Override
protected Document doInBackground(Integer... params) {
    // TODO Auto-generated method stub
     DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();

    try {
        //Uri uri = Uri.parse("android.resource://com.example.xml_parser/raw/options");
        InputStream is=getResources().openRawResource(R.raw.options);

        DocumentBuilder db = dbf.newDocumentBuilder();
        dom=db.parse(is);
        Log.i(TAG,"parsing done");

    }

    catch(ParserConfigurationException pce){
        pce.printStackTrace();
    }
    catch(SAXException se){
        se.printStackTrace();
    }
    catch(IOException ioe){
        ioe.printStackTrace();
    }
    return dom;


}
4

1 回答 1

2

错误是,您试图在主 UI 线程中解析 XML。这意味着您正在限制用户使用 UI 执行操作。在 Andorid 中需要注意的是,每当应用程序没有响应超过 5 秒时,您将被抛出 Applicaation Not Responding 对话框。

所以你要做的是,使用 AsyncTask 来解析你的 XML,然后从中更新你的 Ui。

这是一个例子,

https://stackoverflow.com/a/5806402/603744

AsyncTask 包含三个方法,即

  1. doInBackground -相当于你的线程。
  2. onPostExcecute - 一旦 doInBackground 完成其任务时调用。
  3. 在调用 doInBackground 之前 onPreExecute-Called。

第二种和第三种方法与 UI 有关,您可以在此处执行任何基于 UI 的操作,第一种方法是您的后台线程,您必须在其中进行大量计算,因此不会影响您的 UI。

于 2012-07-23T05:15:23.093 回答