2012-07-23 56 views
0

它运行得很好,直到昨天...我是新的android编程,任何帮助将是伟大的.. 在我的应用程序我解析下载的xml文件,然后创建一个动态UI ... 这里是我的代码片段..每当我运行我的Android应用程序,它说“XYZ没有响应”

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; 


} 

回答

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. onPreExecute - 在调用doInBackground之前调用。

的第二和第三的方法都涉及到用户界面,你可以在这里进行任何基于UI的动作,和第1方法是你的后台线程,你必须做你无边的计算,这样就不会影响你的UI。

+0

还有一件事我想问你能告诉我如何执行这个asyncTask以及如何使用返回的Doc参数... – user1511085 2012-07-23 05:43:23

+0

您可以检查示例。我相信它非常清楚。 – 2012-07-23 05:45:28

+0

我得到的基本知识,但使用返回的参数“在这种情况下 - ”parsedXML“”...它总是给空,当我在PostExecute(文档d)中使用它时出现问题; – user1511085 2012-07-23 05:48:58

相关问题