2013-04-15 22 views
0

我有以下代碼爲AsyncTask。它運行良好。但是,當我刪除註釋的代碼位時,我從來沒有收到onPostExecute事件(No Toast)。onPostExecute僅在調用另一個void時不會調用

@Override 
protected void onPostExecute(String result) { 
     internetData = result;   
     tempview.append(result + "\n"); 
     Toast.makeText(getApplicationContext(), internetData.toString(), 1).show(); 
     //setServiceId(); 
} 

setServiceId事件,並按照事件(URL故意刪除),GetXMLData是我AsyncTask

public void setServiceId() { 
    if (internetData != null) { 
     try { 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      XmlPullParser xpp = factory.newPullParser(); 

      xpp.setInput(new StringReader(internetData)); 
      int eventType = xpp.getEventType(); 
      while (eventType != XmlPullParser.END_DOCUMENT) { 
       if (eventType == XmlPullParser.TEXT) { 
        serviceId = xpp.getText(); 
        serviceHistory = "www.google.com/" + serviceId + "/history"; 
        serviceUsage = "www.google.com/" + serviceId + "/usage"; 
        serviceDetails = "www.google.com/" + serviceId + "/service"; 
        Toast.makeText(getApplicationContext(), serviceId, 1).show(); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    updateHistory(); 
    updateDetails(); 
    updateUsage(); 
} 

public void updateHistory() { //Never called 
    new GetXMLData().execute(serviceHistory); 
    Toast.makeText(getApplicationContext(), "Update History", 1).show(); 
} 

public void updateUsage() { //Never called 
    new GetXMLData().execute(serviceUsage); 
    Toast.makeText(getApplicationContext(), "Update Usage", 1).show(); 
} 

public void updateDetails() { //Never called 
    new GetXMLData().execute(serviceDetails); 
    Toast.makeText(getApplicationContext(), "Update Details", 1).show(); 
} 

    public void updateData() { //First call 
    new GetXMLData().execute(serviceListing); 
    Toast.makeText(getApplicationContext(), "Update Data", 1).show(); 
} 

上面的最後一個事件,updateData被調用,並Toast似乎永遠不會消失當setServiceId事件未被註釋掉。除此之外,XML數據不被檢索。

當它被註釋掉時,我收到updateData()事件的XML數據,但沒有發生以下事件,而且我沒有從onPostExecute獲得Toast。任何建議,爲什麼這是發生?

+2

'而( eventType!= XmlPullParser.END_DOCUMENT)'如果有'eventType!= XmlPullParser.END_DOCUMENT',則無限循環。您需要在循環中更改eventType。 – andrew

+0

+1以上評論。在while循環中使用xpp.getNextTag()或xpp.getNext()。 – SKK

+0

@andrew_pako你先生,是正確的......我覺得很無聊:D – JosephGarrone

回答

1

實際上,你在你的while循環條件的錯誤,因爲無窮將循環,使您的應用程序掛起:

while (eventType != XmlPullParser.END_DOCUMENT) { 
     if (eventType == XmlPullParser.TEXT) { 
      serviceId = xpp.getText(); 
      serviceHistory = "www.google.com/" + serviceId + "/history"; 
      serviceUsage = "www.google.com/" + serviceId + "/usage"; 
      serviceDetails = "www.google.com/" + serviceId + "/service"; 
      Toast.makeText(getApplicationContext(), serviceId, 1).show(); 
     } 
    } 

您的循環中添加下一行:

eventType = xpp.next(); 
相關問題