如何在 Android Studio 中使用 AsyncTask 从可绘制对象中设置图像

Posted

技术标签:

【中文标题】如何在 Android Studio 中使用 AsyncTask 从可绘制对象中设置图像【英文标题】:How to set image from drawables using AsyncTask in Android Studio 【发布时间】:2021-05-04 06:39:33 【问题描述】:

我正在尝试执行一个非常简单的任务(在后台将图像加载到 ImageView),但无法使其工作。非常感谢任何帮助。

这是我目前所拥有的: 这就是我在主线程中调用创建类的方式:

 LoadImage  newImage=new LoadImage();
 newImage.execute(myImgeView);

接下来我创建了这个类:

public class LoadImage extends AsyncTask<ImageView, Void, ImageView> 

ImageView imageView;


        @Override
        protected ImageView doInBackground(ImageView... params) 
            Log.e("myTag",": Can it see this class from where I call it? Yes it does" );
     
            imageView.setImageResource(R.drawable.myNewImage);
       

            return imageView;
        

    

我不知道如何正确设置它。它崩溃说类似: 尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setImageResource(int)”。

提前感谢您的帮助。

【问题讨论】:

您缺少“imageView = ....”部分。您从未为 imageView 分配任何值,因此它为空。你也不应该像那样使用 AsyncTask 。 AsyncTask 应该在 doInBackground 方法的后台做一些工作,然后它可以从在 UI 线程上运行的 onPostExecute 方法更新你的 ui。如果您的 AsyncTask 仅用于更新 UI,则不需要它。 感谢您的评论。你能写一些代码,所以我知道你在说什么,看看它是否有效。谢谢。 【参考方案1】:

AsyncTask 已弃用。对于这种类型的操作,建议使用一些库并使事情变得更容易:Picasso、Glide、Fresco...等

【讨论】:

【参考方案2】:

问题出在这段代码中:

imageView.setImageResource(R.drawable.myNewImage);

variableimageView 无法从 AsyncTask 类中看到,您想要的 imageView 在 params 数组内,因此您可以使用 params[0] 引用它。所以将上面的代码替换为:

ImageView imageView = params[0];
imageView.setImageResource(R.drawable.myNewImage);
return imageView;

【讨论】:

【参考方案3】:

您不应再使用 AsyncTask,因为它已被弃用,就像已经提到的 jesusd0897 一样。如果您需要从远程资源(例如 API)加载图像,那么 Glide 或其他库会为您完成这项工作。

但是对于这种简单的情况,您不需要异步任务。只需在 Activity/Fragment 等的主线程上执行即可:

imageView.setImageResource(R.drawable.myNewImage)

【讨论】:

以上是关于如何在 Android Studio 中使用 AsyncTask 从可绘制对象中设置图像的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio如何新建一个项目以及移除项目(从AS中移除但是文件还在本地)

Android Studio 笔记

如何安装android studio

GIT@OSC中托管Android studio代码

如何手动添加Android Dependencies包

如何获得所有android应用程序UID