我正在使用類擴展Asynctask來下載數據表單webservice。爲了防止數據丟失和請求超時,我試圖重複這個asynctask並每隔100行讀取一次數據。但循環錯誤,從不運行任務:如何在完成後重複AsyncTask
功能重複任務:
public void executeCustomer(String vSpvId){
String vURL;
int vloop = 1;
while(notStop){
vURL = Routines.URL_CUSTOMER + "?vloop=" + String.ValueOf(vLoop) + "&vsupvid=" + vSpvId;
Log.d(TAG, vURL);
vCustomerAsyncTask = new CustomerAsyncTask();
vCustomerAsyncTask.execute(vURL);
vloop++;
}
}
任務,下載數據:
private class CustomerAsyncTask extends AsyncTask<String, Void, String>{
@Override
protected void onPreExecute() {
showProgressBar(Routines.WAIT);
}
@Override
protected String doInBackground(String... vURL) {
String vASPXText = Routines.getASPXText(vURL[0]);
return vASPXText;
}
@Override
protected void onPostExecute(String vASPXResult) {
super.onPostExecute(vASPXResult);
try{
if((vASPXResult.length() == 0)||(vASPXResult.contains("masalah"))){
vDialogBox.dismiss();
Toast.makeText(getApplicationContext(), Routines.DATABASE_ERROR, Toast.LENGTH_SHORT).show();
throw new NullPointerException(Routines.DATABASE_ERROR);
}
}catch(NullPointerException e){
e.printStackTrace();
Log.w(TAG, Routines.DATABASE_ERROR);
vDialogBox.dismiss();
showDialogBox(Routines.WARNING, Routines.DATABASE_ERROR);
return;
}
vDialogBox.dismiss();
notStop = parsingCustomer(vASPXResult);
}
}
函數來分析數據:
private boolean parsingCustomer(String vASPXResult){
try{
Log.d(TAG, vASPXResult);
if(vASPXResult.indexOf("[email protected]`") == 0){
// function to parse data
// return true to read next data from webservice
return = true;
}else if (vASPXResult.indexOf("[email protected]`") == 0){
// function to parse data
// return false to stop read data from webservice
return = false;
}
}catch (StringIndexOutOfBoundsException e) {
e.printStackTrace();
Log.e(TAG, Routines.DATABASE_ERROR);
showDialogBox(Routines.WARNING, Routines.DATABASE_ERROR);
}
}
我的問題是如何重複的asynctask,當它完成下載第一個數據,然後重複自我做下一個網址參數。當我檢查logcat時,循環總是運行,但任務從未完成。所以,如何讓它可以運行重複的asynctask。
如果我正確地讀你,就沒有必要使用例如10的AsyncTask下載10個網址sequently。就你而言,只需構建並準備10個URL並將URL列表傳遞到一個AsyncTask中,然後在doInBackground()方法中,正確地實現for循環以按順序迭代和處理URL。 – yorkw 2012-04-16 10:55:25