2012-07-23 97 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

相關問題