0
         public class TopMovie extends Activity  
        {
            GridView lv;
           Vibrator vibrator;
    Dialog dialog;
    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        Log.i("Category", MainActivity.movie_Category);`enter code here`
        setContentView(R.layout.new_movie);
        setProgressBarIndeterminateVisibility(true);
        setProgressBarIndeterminateVisibility(false);
        vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        lv = (GridView) findViewById(R.id.grid_view);

        // URL to the JSON data
        String strUrl = "http://vaibhavtech.com/work/android/movie_list.php?category="
                + MainActivity.movie_Category + "&sub_category=other";
        DownloadTask downloadTask = new DownloadTask();
        downloadTask.execute(strUrl);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // // TODO Auto-generated method stub
                vibrator.vibrate(40);
                LayoutInflater inflater = getLayoutInflater();
                View view = inflater.inflate(R.layout.customtoast,
                        (ViewGroup) findViewById(R.id.custom_toast_layout));
                Toast toast = new Toast(getApplicationContext());
                toast.setDuration(Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);
                toast.setView(view);
                toast.show();
                MainActivity.movie_Id = ((TextView) arg1
                        .findViewById(R.id.tv_girdview_content_id)).getText()
                        .toString();
                Log.i("Name is", MainActivity.movie_Id);
                startActivity(new Intent(TopMovie.this, MovieDescription.class));
            }
        });
    }


    private String downloadUrl(String strUrl) throws IOException {
        String data = "";
        InputStream iStream = null;
        try {
            URL url = new URL(strUrl);

            // Creating an http connection to communicate with url
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            iStream = urlConnection.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(
                    iStream));

            StringBuffer sb = new StringBuffer();

            String line = "";
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }

            data = sb.toString();

            br.close();

        } catch (Exception e) {
            Log.d("Exception while downloading url", e.toString());
        } finally {
            iStream.close();
        }

        return data;
    }

    protected void onPreExecute() {
        // SHOW THE SPINNER WHILE LOADING FEEDS
//      linlaHeaderProgress.setVisibility(View.VISIBLE);
        //super.onPreExecute();
        dialog=dialog=ProgressDialog.show(TopMovie.this,"", "Loading...", true);
    }
    /** AsyncTask to download json data */
    private class DownloadTask extends AsyncTask<String, Integer, String> {
        String data = null;

        @Override
        protected String doInBackground(String... url) {
            try {
                data = downloadUrl(url[0]);

            } catch (Exception e) {
                Log.d("Background Task", e.toString());
            }
            return data;
        }

        @Override
        protected void onPostExecute(String result) {

            // The parsing of the xml data is done in a non-ui thread
            ListViewLoaderTask listViewLoaderTask = new ListViewLoaderTask();

            // Start parsing xml data
            listViewLoaderTask.execute(result);

        }
    }

    /** AsyncTask to parse json data and load ListView */
    private class ListViewLoaderTask extends
            AsyncTask<String, Void, SimpleAdapter> {

        JSONObject jObject;

        // Doing the parsing of xml data in a non-ui thread
        @Override
        protected SimpleAdapter doInBackground(String... strJson) {
            try {
                jObject = new JSONObject(strJson[0]);
                MovieParser countryJsonParser = new MovieParser();
                countryJsonParser.parse(jObject);
            } catch (Exception e) {
                Log.d("JSON Exception1", e.toString());
            }

            // Instantiating json parser class
            MovieParser countryJsonParser = new MovieParser();

            // A list object to store the parsed countries list
            List<HashMap<String, Object>> countries = null;

            try {
                // Getting the parsed data as a List construct
                countries = countryJsonParser.parse(jObject);
            } catch (Exception e) {
                Log.d("Exception", e.toString());
            }

            // Keys used in Hashmap
            String[] from = { "image", "id", "year", "duration", "name" };

            // Ids of views in listview_layout
            // int[] to = {
            // R.id.iv_radio_data_image,R.id.tv_radio_data_id,R.id.tv_radio_data_like,R.id.tv_radio_data_rating,R.id.tv_radio_data_listner,R.id.tv_radio_data_radio_url,R.id.tv_radio_data_name};
            int[] to = { R.id.iv_girdview_content_image,
                    R.id.tv_girdview_content_id, R.id.tv_girdview_content_like,
                    R.id.tv_girdview_content_listner,
                    R.id.tv_girdview_content_name };

            SimpleAdapter adapter = new SimpleAdapter(getBaseContext(),
                    countries, R.layout.grid_view_content, from, to);

            return adapter;
        }

        /** Invoked by the Android on "doInBackground" is executed */
        @Override
        protected void onPostExecute(SimpleAdapter adapter) {

            // Setting adapter for the listview
            lv.setAdapter(adapter);
         // Setting adapter for the listview
                    if(dialog!=null)
                        dialog.dismiss();
            for (int i = 0; i < adapter.getCount(); i++) {
                HashMap<String, Object> hm = (HashMap<String, Object>) adapter
                        .getItem(i);
                String imgUrl = (String) hm.get("flag_path");
                ImageLoaderTask imageLoaderTask = new ImageLoaderTask();

                HashMap<String, Object> hmDownload = new HashMap<String, Object>();
                hm.put("flag_path", imgUrl);
                hm.put("position", i);

                // Starting ImageLoaderTask to download and populate image in
                // the listview
                imageLoaderTask.execute(hm);


        }
    }

    /** AsyncTask to download and load an image in ListView */
    private class ImageLoaderTask extends
            AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>> {

        @Override
        protected HashMap<String, Object> doInBackground(
                HashMap<String, Object>... hm) {

            InputStream iStream = null;
            String imgUrl = (String) hm[0].get("flag_path");
            int position = (Integer) hm[0].get("position");

            URL url;
            try {
                url = new URL(imgUrl);

                // Creating an http connection to communicate with url
                HttpURLConnection urlConnection = (HttpURLConnection) url
                        .openConnection();

                // Connecting to url
                urlConnection.connect();

                // Reading data from url
                iStream = urlConnection.getInputStream();

                // Getting Caching directory
                File cacheDirectory = getBaseContext().getCacheDir();

                // Temporary file to store the downloaded image
                File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"
                        + position + ".png");

                // The FileOutputStream to the temporary file
                FileOutputStream fOutStream = new FileOutputStream(tmpFile);

                // Creating a bitmap from the downloaded inputstream
                Bitmap b = BitmapFactory.decodeStream(iStream);

                // Writing the bitmap to the temporary file as png file
                b.compress(Bitmap.CompressFormat.PNG, 100, fOutStream);

                // Flush the FileOutputStream
                fOutStream.flush();

                // Close the FileOutputStream
                fOutStream.close();

                // Create a hashmap object to store image path and its position
                // in the listview
                HashMap<String, Object> hmBitmap = new HashMap<String, Object>();

                // Storing the path to the temporary image file
                hmBitmap.put("image", tmpFile.getPath());

                // Storing the position of the image in the listview
                hmBitmap.put("position", position);

                // Returning the HashMap object containing the image path and
                // position
                return hmBitmap;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(HashMap<String, Object> result) {
            // Getting the path to the downloaded image
            String path = (String) result.get("image");

            // Getting the position of the downloaded image
            int position = (Integer) result.get("position");

            // Getting adapter of the listview
            SimpleAdapter adapter = (SimpleAdapter) lv.getAdapter();

            // Getting the hashmap object at the specified position of the
            // listview
            HashMap<String, Object> hm = (HashMap<String, Object>) adapter
                    .getItem(position);

            // Overwriting the existing path in the adapter
            hm.put("image", path);
            adapter.notifyDataSetChanged();
        }
    }
}}

i have a gridview in which items coming from json..,sometime my applications runs but sometime gives REJECTED EXECUTION EXECPTION at " imageLoaderTask.execute(hm);",i am unable to understand how to resolve this problem.i have tried all examples and condiotions.i have used asynchtask ,custom adapetr in my code ,but no solution and answer is ocured in my code.,how can i resolve my error.please help me...:(

Rajshree Tiwari
  • 630
  • 1
  • 7
  • 27

2 Answers2

0

First you have to understand what RejectedExecutionException means. Then decide how do you want to handle it.

AsyncTask runs its tasks in an Executor. This executor uses a queue where the tasks are stored until the executor is free to pay attention to them. The default executor with a default task can handle 10 tasks at the same time and store 10 additional tasks to perform once the running ones complete. Once the spot for all these 20 tasks (10+10) it can't take any more tasks, and it lets you know by raising a RejectedExecutionException.

How can you deal with this? Depends on what you need. You can catch that exception and try again later to see if the queue has room later, or you could use a differently configured executor that (a) can perform more tasks at the same time or (b) that has a queue with more space for tasks. Some already existing executor classes can be configured with parameters more appropriate for your needs (see the documentation for Executor) or you can write your own. One such executor is ThreadPoolExecutor that you can tell what kind of queue to use (this is the executor that is used in some of the Android versions, you don't specify which version you're working with). In the documentation there's discussion about what kinds of queues there are.

Again, the decision on how to configure the executor and queue is up to you and your needs. Such as if you want to allow for unbounded creation of threads, or have a limit. Want to have a long queue of tasks or short, or even unbound.

frozenkoi
  • 3,228
  • 22
  • 33
  • but sir how can i use threadpool executor in my code..,can you please elaborate my code please by an example.....:) – Rajshree Tiwari Oct 29 '13 at 05:44
  • See AsyncTask.executeOnExecutor function: http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor(java.util.concurrent.Executor, Params...) – frozenkoi Oct 30 '13 at 02:20
0

Try this..

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)     
    imageLoaderTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, hm);          
else
    imageLoaderTask.execute(hm);

For all AsyncTask

Hariharan
  • 24,741
  • 6
  • 50
  • 54