android - 同时调用多个asynctask

标签 android

我的 asynctaskimageloader2 崩溃了。如何同时多次从 URL 加载位图?如果我删除 asynctaskloader2,它工作得很好,而且在 5.0 或更高版本中它工作得很好,但在 API17 中,它不起作用。

private void getProfileInfo() {
    // istek iptali için tag
    String tag_string_req = "req_profile_info";

    pDialog.setMessage(getContext().getResources().getString(R.string.please_wait));
    showDialog();

    StringRequest strReq = new StringRequest(Method.POST, AppConfig.URL_USERS, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            hideDialog();
            try {
                JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");

                if (!error) {
                    //başarılı
                    JSONObject user = jObj.getJSONObject("user");

                    txtProfileName.setText(user.getString("name"));
                    email = user.getString("email");

                    String profileUri = AppConfig.URL_MAIN + user.getString("profile_img");
                    String coverUri = AppConfig.URL_MAIN + user.getString("cover_img");
                    AsyncImageLoader1 ail1 = new AsyncImageLoader1();
                    ail1.execute(profileUri);


                    AsyncImageLoader2 ail2 = new AsyncImageLoader2();
                    ail2.execute(coverUri);

                    txtFollowers.setText(user.getString("follower"));
                    txtFollowing.setText(user.getString("following"));

                    String follow = user.getString("follow");
                    followOrUnfollow = follow;
                    if (follow.equals("follow"))
                        btnFollow.setText(getContext().getResources().getString(R.string.profile_follow));
                    else
                        btnFollow.setText(getContext().getResources().getString(R.string.profile_unfollow));

                    btnLike.setText(user.getString("total_like") + " " + getContext().getResources().getString(R.string.profile_likes));

                    at_contest = user.getString("at_contest");
                    if(at_contest.equals("1")){
                        imgStatus.setImageResource(R.mipmap.ic_at_contest_true);
                    }
                    else{
                        imgStatus.setImageResource(R.mipmap.ic_at_contest_false);
                    }

                    images = user.getJSONArray("images");
                    JSONArray image_ids = user.getJSONArray("image_id");
                    JSONArray image_likes = user.getJSONArray("like");
                    imageList.clear();
                    adapter.notifyDataSetChanged();
                    int limit;
                    if (MainActivity.PROFILE_UID.equals(MainActivity.USER_UID))
                        limit = 4;
                    else if (!image_ids.getString(0).equals("null"))
                        limit = images.length();
                    else
                        limit = 0;
                    for (int i = 0; i < limit; i++) {
                        ImageList imageSingleList = new ImageList();
                        if (i < images.length() && !images.getString(i).equals("null")) {
                            String image = images.getString(i);
                            imageSingleList.setImageId(image_ids.getString(i));
                            imageSingleList.setImageUrl(AppConfig.URL_MAIN + image);
                            imageSingleList.setImageLike(image_likes.getString(i));
                        } else if (MainActivity.USER_UID.equals(MainActivity.PROFILE_UID)){
                            imageSingleList.setImageId("default");
                            imageSingleList.setImageUrl(AppConfig.URL_MAIN + "user_images/default_images/ic_default_img.png");
                            imageSingleList.setImageLike("0");
                        }
                        imageList.add(imageSingleList);
                    }

                    adapter.notifyDataSetChanged();
                } else {
                    // başarısız
                    Toast.makeText(getActivity().getApplicationContext(), R.string.error_occured, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                // JSON hatası
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getActivity().getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
            hideDialog();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            // users url' e bilgileri gönder
            Map<String, String> params = new HashMap<String, String>();
            params.put("tag", "profileinfo");
            params.put("follower_id", MainActivity.PROFILE_UID);
            params.put("followed_id", MainActivity.USER_UID);

            return params;
        }
    };

    // istek kuyruğuna isteği ekle
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}


private class AsyncImageLoader1 extends AsyncTask<String, Void, Bitmap> {
    Bitmap bitmap2;

    protected void onPreExecute() {
        pDialog.setMessage(getContext().getResources().getString(R.string.please_wait));
        showDialog();
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        hideDialog();
        URL url = null;
        HttpURLConnection connection = null;
        try {
            url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            bitmap2 = BitmapFactory.decodeStream(input);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            connection.disconnect();
        }

        return bitmap2;
    }

    @Override
    protected void onPostExecute(Bitmap bm) {
        imgProfile.setImageBitmap(bm);
        if (MainActivity.PROFILE_UID.equals(MainActivity.USER_UID))
            FragmentDrawer.imgProfileNavDrawer.setImageBitmap(bm); // Sol drawer' da çıkan yuvarlak resmi güncellemek için
    }
}

private class AsyncImageLoader2 extends AsyncTask<String, Void, Bitmap> {
    Bitmap bitmap1;

    protected void onPreExecute() {
        pDialog.setMessage(getContext().getResources().getString(R.string.please_wait));
        showDialog();
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        hideDialog();
        URL url = null;
        HttpURLConnection connection = null;

        try {
            url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            bitmap1 = BitmapFactory.decodeStream(input);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            connection.disconnect();
        }

        return bitmap1;
    }

    @Override
    protected void onPostExecute(Bitmap bm) {
        imgCover.setImageBitmap(bm);
    }
}

最佳答案

你可以这样做:

FirstAsyncTask asyncTask = new FirstAsyncTask(); // First
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) // Above Api Level 13
        {
            asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        }
        else // Below Api Level 13
        {
            asyncTask.execute();
        }
SecondAsyncTask asyncTask2 = new SecondAsyncTask(); // Second
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)// Above Api Level 13
        {
            asyncTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        }
        else // Below Api Level 13
        {
            asyncTask2.execute();
        }

希望对您有所帮助。

关于android - 同时调用多个asynctask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711393/

相关文章:

android - Gradle 插件 : How to convert all images (resources) before APK is packed

android - 如何录制 Android 模拟器运行的视频?

android - 如何在 setongoing(true) 之后删除持久通知?

java - Android中的调用方法

android - 如何在Android Google Play商店URL中隐藏应用程序ID?

android - 如何按名称从 res/raw 读取文件

android - 在 Android Studio 中使用 Git 将本地分支与远程分支 merge

android - 带有搜索 View 的操作栏。反向兼容问题

java - 在 Android 中运行方法时显示加载对话框?

java - 无法从 Google Play Android Developer API 获取订阅详细信息