【问题标题】:Async Task for downloading image into bitmap用于将图像下载到位图中的异步任务
【发布时间】:2021-09-04 07:45:21
【问题描述】:

我有 RecyclerView,在 OnClick 方法中我需要获取我点击的元素的位图图像:

class ViewHolder extends RecyclerView.ViewHolder {
            ImageView imgSticker;

            ViewHolder(View itemView) {
                super(itemView);
                imgSticker = itemView.findViewById(R.id.imgSticker);

                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (mStickerListener != null) {
                            try {
                                URL url = new URL(stickerList.get(getLayoutPosition()));
                                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                            } catch (MalformedURLException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }

                            mStickerListener.onStickerClick(image);
                        }
                        dismiss();
                    }
                });
            }
        }

但这确实有效,因为我得到了异常,它应该在另一个步骤中完成,我知道我需要创建类扩展 AsyncTask 并覆盖方法“doInBackground”,但我很难理解我需要编写哪些参数这里: class downloadStickersTask extends AsyncTask<?, ?, ?> 以及我应该如何覆盖 doInBackgroundMethod。我是android的初学者,线程对我来说很难

【问题讨论】:

标签: android multithreading android-asynctask


【解决方案1】:
if (mStickerListener != null) {
        new Thread(() -> {
            
                            try {
                                URL url = new URL(stickerList.get(getLayoutPosition()));
                                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                            } catch (MalformedURLException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }

                            
                        }
            runOnUiThread(()->{
                mStickerListener.onStickerClick(image);
            });
        }).start();
dismiss();

试试这个

【讨论】:

  • 谢谢,但它不起作用,当我在其他类中调用此方法时,我得到`无法在未调用 Looper.prepare 的线程 Thread[Thread-8,5,main] 内创建处理程序() `
  • 你使用的是 java 8 吗?
  • 我在 android studio 文件夹中看到它:“此通知是针对 ASM 字节码操作框架 v5.0.3 提供的,它可能包含在 JRE 8、JDK 8 和 OpenJDK 8 中。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多