原代码是从网上找到的例子,现在想做一点改动,即原代码是直接在方法内将图片赋给了ImageView,但现在想把图片赋到一个参数dr中,然后需要在别的地方调用这个dr。现在的问题是在外面调用的时候dr总是null,求解
代码如下:
package ghj1976.AndroidTest;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
loadImage3("http://www.baidu.com/img/baidu_logo.gif", R.id.imageView1);
loadImage3("http://www.chinatelecom.com.cn/images/logo_new.gif",
R.id.imageView2);
loadImage3("http://cache.soso.com/30d/img/web/logo.gif",
R.id.imageView3);
loadImage3("http://csdnimg.cn/www/images/csdnindex_logo.gif",
R.id.imageView4);
loadImage3("http://images.cnblogs.com/logo_small.gif",
R.id.imageView5);
}
private Handler handler = new Handler();
private ExecutorService executorService = Executors.newFixedThreadPool(5);
private Drawable dr;
// 引入线程池来管理多线程
private void loadImage3(final String url, final int id) {
executorService.submit(new Runnable() {
public void run() {
try {
final Drawable drawable = Drawable.createFromStream(
new URL(url).openStream(), "image.png");
// 模拟网络延时
SystemClock.sleep(2000);
handler.post(new Runnable() {
public void run() {
((ImageView) MainActivity.this.findViewById(id))
.setImageDrawable(drawable);
//就是想在外面获取这个dr的值,但不知道怎么获取
dr = drawable;
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
}
相关推荐
在这个主题下,我们将深入探讨Android中的异步任务(AsyncTask)、Binder、Handler以及迭代器模式。 首先,我们来理解Android中的异步任务(AsyncTask)。AsyncTask是Android提供的一种轻量级的异步处理机制,主要...
在Android开发中,异步加载图片是一个非常常见的需求,特别是在构建UI时,为了提供良好的用户体验,我们通常会避免在主线程中执行耗时的操作,如网络请求和图片解码。本教程将深入探讨如何利用异步操作来实现从...
2. **内存缓存**:内存缓存(如LRUCache)可以存储已经加载过的图片,当再次需要时,可以从内存中快速获取,避免重复加载。 3. **磁盘缓存**:图片数据也可以被缓存在磁盘上,如SQLite数据库或文件系统,以便在网络...
总之,"android 异步显示View"这个话题涵盖了Android异步编程的多种技术和最佳实践,包括AsyncTask、Handler/Looper、Loader、Adapter/ViewHolder优化、Paging Library以及第三方库的使用,都是为了在保证用户体验的...
本项目“Android异步加载文字”将探讨如何在Android Studio中实现在后台加载文本数据,避免UI卡顿,提高应用响应速度。 首先,我们需要了解Android的多线程模型。Android应用的主要执行线程被称为UI线程,负责处理...
在Android应用开发中,异步网络请求是必不可少的一部分,特别是在加载网络图片时。"Android异步请求网络图片demo"是一个示例项目,旨在演示如何在Android应用中有效地、非阻塞地下载并显示网络上的图片。这个项目的...
在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,它们共同构建了一个消息处理机制。这个机制允许开发者在不同的线程之间传递消息,通常用于更新UI或者执行异步任务。下面我们将深入...
在Android应用开发中,异步加载图片是一项基本且重要的任务,尤其在处理大量图片或滑动列表时,如ListView、RecyclerView等。异步加载能够避免因加载图片导致的UI卡顿,提高用户体验。本篇文章将详细讲解如何在...
在Android中,除了Handler外,还可以使用AsyncTask、Loader、RxJava等工具实现异步刷新。每种方法都有其特点和适用场景,开发者应根据项目需求选择合适的方式。 四、双缓存 双缓存策略通常用于提高数据读取速度,...
Handler消息机制是Android系统中处理线程间通信的重要方式,它与Looper和Message紧密关联,构建了一套完整的异步处理模型。在这个模型中,Handler主要负责发送和处理Message,Looper负责在一个线程中循环地读取...
总结,本示例主要介绍了如何在Android中异步获取已安装APK的信息,包括使用`PackageManager`获取信息、通过`AsyncTask`实现异步加载以及处理运行时权限。通过理解这些知识点,开发者可以构建出能够高效处理大量数据...
本示例主要探讨如何在Android应用中利用kotlin的协程(Coroutines)和ksoap2库来实现对WebService的调用,并解决在API 30及以上版本中Handler过时的问题。 一、ksoap2库介绍 ksoap2是一个轻量级的开源库,专为...
在Android开发中,从网络下载图片是一项常见的任务,特别是在构建应用程序时,比如社交应用、电商应用等。本文将深入探讨三种不同的方法来实现这一功能:Handler、AsyncTask以及线程池。 1. Handler机制下载图片: ...
在Android开发过程中,Handler是进行线程间通信的重要机制之一,尤其在实现异步任务更新UI等场景中扮演着关键角色。本篇文章将围绕Handler的工作原理、核心组件及其实现方式进行深入探讨,帮助读者更好地理解并掌握...
在Android开发中,异步下载图片是一个常见的需求,特别是在构建应用程序时,为了提供良好的用户体验,我们需要在后台加载图片,而不是阻塞主线程。本篇将深入探讨如何实现异步下载图片并返回Bitmap以及图片的本地...
总之,"图片异步压缩保存到本地文件" 是 Android 开发中的关键技术,它涉及到图片压缩算法、内存管理以及异步编程等多个方面。"PhotoCompress" 库简化了这一过程,提供了方便的集成和定制选项,使得开发者能够高效地...
在Android应用开发中,异步编程是至关重要的,它能够帮助我们解决主线程阻塞问题,提高用户体验。本文将深入探讨Java和Android平台上的异步编程小技巧,并以"android业务异步编程小技巧.zip"和"java业务异步编程小...
在Android开发中,异步加载网络图片是一项...总结起来,Android异步加载网络图片的核心是利用多线程和消息机制,确保图片加载过程不会阻塞主线程。通过合理地运用这些技术,开发者可以构建出流畅且高效的图片加载体验。
由于Android的UI操作必须在主线程进行,因此需要在这里调用`runOnUiThread()`或使用`Handler`更新UI组件,如显示数据或加载图片。 6. **错误处理** 异步请求可能因网络问题、服务器错误或其他原因失败,需要捕获...