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
。任何建議,爲什麼這是發生?
'而( eventType!= XmlPullParser.END_DOCUMENT)'如果有'eventType!= XmlPullParser.END_DOCUMENT',則無限循環。您需要在循環中更改eventType。 – andrew
+1以上評論。在while循環中使用xpp.getNextTag()或xpp.getNext()。 – SKK
@andrew_pako你先生,是正確的......我覺得很無聊:D – JosephGarrone