Loop asynctask android выполняет только последнее значение в цикле

У меня есть массив целых чисел, которые нужно вызывать один за другим в цикле из url. У меня есть код ниже, и он вызывает последний номер несколько раз, но все числа с начала пропускаются. Как я могу заставить это работать Я очень ценю любую помощь. Спасибо в Advance.

final String[] ar={"1","2","3",.............,"25"}

 for ( j = 0; j < ar.length; j++) {


 u="http://www.example.com/"+ar[j];

 JSONParser jParser=new JSONParser(); 
 new MyAsyncTask().execute(u);

 }


 class MyAsyncTask extends AsyncTask<string, string,="" void=""> {

 private ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
 InputStream inputStream = null;
 String result = ""; 

 protected void onPreExecute() {
 progressDialog.setMessage("Downloading your data...");
 progressDialog.show();
 progressDialog.setOnCancelListener(new OnCancelListener() {
 public void onCancel(DialogInterface arg0) {
 MyAsyncTask.this.cancel(true);
 }
 });
 }

 @Override
 protected Void doInBackground(String... params) {

 String url_select = params[0];
 try {

 HttpClient httpclient = new DefaultHttpClient();
 HttpResponse httpResponse = httpclient.execute(new HttpGet(url_select));

 // receive response as inputStream
 inputStream = httpResponse.getEntity().getContent();
//
// // Read content & Log
// inputStream = httpEntity.getContent();
 } catch (UnsupportedEncodingException e1) {
 Log.e("UnsupportedEncodingException", e1.toString());
 e1.printStackTrace();
 } catch (ClientProtocolException e2) {
 Log.e("ClientProtocolException", e2.toString());
 e2.printStackTrace();
 } catch (IllegalStateException e3) {
 Log.e("IllegalStateException", e3.toString());
 e3.printStackTrace();
 } catch (IOException e4) {
 Log.e("IOException", e4.toString());
 e4.printStackTrace();
 }
 // Convert response to string using String Builder
 try {
 BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"), 8);
 StringBuilder sBuilder = new StringBuilder();

 String line = null;
 while ((line = bReader.readLine()) != null) {
 sBuilder.append(line + "\n");
 }

 inputStream.close();
 result = sBuilder.toString();

 } catch (Exception e) {
 Log.e("StringBuilding & BufferedReader", "Error converting result " + e.toString());
 }
 return null;
 } // protected Void doInBackground(String... params)


 protected void onPostExecute(Void v) {

 //parse JSON data
 try{
 JSONObject jArray = new JSONObject(result);


 // End Loop

 this.progressDialog.dismiss();

 } catch (JSONException e) {

 Log.e("JSONException", "Error: " + e.toString());

 } // catch (JSONException e)
 catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }


 } // protected void onPostExecute(Void v)

 } //class MyAsyncTask extends AsyncTask</string,>
3 ответа

использование

String url_select = parms[0];

Если вы хотите выполнить параллельное выполнение, вы должны использовать исполнителя. Я предлагаю вам использовать исполнителя вместо выполнения asynctask в цикле for.

new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "url1","url2"..);

http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor(java.util.concurrent.Executor, Params...)

Проверить порядок исполнения @

http://developer.android.com/reference/android/os/AsyncTask.html


в doInBackground вы должны использовать

url_select = params[0];

вместо url_select = u; (вы назначаете u в цикле for при выполнении задачи асинхронно, поэтому вы не можете "знать, какое значение u имеет, когда выполнение задачи... и в конечном итоге оно сохраняет последнее значение, которое вы назначили..)


String url_select = u;

Я думаю, проблема в том, что здесь вы используете значение hardcoded. Вы должны получить переданное значение из params

String url_select = params[0];

licensed under cc by-sa 3.0 with attribution.