Question

I have an array of integers which needs to be called one after another in a loop from url .I have the code below and it calls the last number multiple times but all the numbers from the beginning is skipped .How do I make this to work.I really appreciate any help.Thanks in 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, String, Void>
Was it helpful?

Solution 2

Use

String url_select = parms[0]; 

If you want parallel execution you should use a executor. I suggest you use a executor instead of executing asynctask in a for loop.

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

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

Check order of execution @

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

OTHER TIPS

in doInBackground you should use

url_select = params[0];

instead of url_select = u; (you assign u in the for loop while executing the task asynchronously so you cant' really know which value u has, when the task is executed...and eventually it keeps the last value that you assigned..)

String url_select = u;

I think the problem is here you are using a hardcoded value here You should get the passed value from params

String url_select = params[0];

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top