`

封装异步线程回调接口更新UI图片

 
阅读更多

封装工具类:

      1.耗时操作消息发送与接收封装到一个方法中。

      2.handler接收消息数据后,使用回调方法赋值。

 

代码如下:封装工具类

public class DownLoadContent {

	private ProgressDialog dialog;
	private static final int code = 1;
	
	public DownLoadContent(Context context){
		dialog = new ProgressDialog(context);
		dialog.setTitle("提示");
		dialog.setMessage("正在加载中");
	}
	public void download(final String path,final DownloadCallback callback){
		final Handler handler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				// TODO Auto-generated method stub
				byte[] by = (byte[]) msg.obj;
				callback.loadContent(by);
				if(msg.what == code){
					dialog.dismiss();
				}
			}
		};
	    class myRunnable implements Runnable{

			@Override
			public void run() {
				// TODO Auto-generated method stub
				HttpClient httpClient = new DefaultHttpClient();
				HttpPost httpPost = new HttpPost(path);
				try {
					HttpResponse response = httpClient.execute(httpPost);
					if(response.getStatusLine().getStatusCode() == 200){
						byte[] result = EntityUtils.toByteArray(response.getEntity());
						Message msg = Message.obtain();
						msg.obj = result;
						msg.what = code;
						handler.sendMessage(msg);
					}
				} catch (ClientProtocolException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					httpClient.getConnectionManager().shutdown();
				}
			}
	    }
	    new Thread(new myRunnable()).start();
	    dialog.show();
	}
	//回调方法
	public interface DownloadCallback{
		
		public void loadContent(byte[] result);
	}
	
}

 

代码如下:Activity调用回调方法更新UI

public class MainActivity extends Activity {
	
	private Button button;
	private ImageView imageView;
	private final String image_path = "http://imgstatic.baidu.com/img/image/shouye/qichepaoche0822.jpg";
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button1);
        imageView = (ImageView)findViewById(R.id.imageView1);
        button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				DownLoadContent content = new DownLoadContent(MainActivity.this);
				content.download(image_path, new DownloadCallback() {
					
					@Override
					public void loadContent(byte[] result) {
						// TODO Auto-generated method stub
						Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
						imageView.setImageBitmap(bitmap);
					}
				});
			}
		});
    }
}

 

 

0
0
分享到:
评论

相关推荐

    android 异步线程http请求模块封装

    4. 请求回调:定义接口或使用Lambda表达式,提供请求成功、失败、进度等回调,便于在主线程中更新UI。 5. 错误处理:对网络异常、解析异常等进行统一处理,返回友好的错误信息。 在封装过程中,我们还应该考虑以下...

    okhttp二次回调封装Demo

    封装时,需要考虑线程切换,确保回调到UI线程。 8. **取消请求**:在应用中,可能需要取消正在进行的请求。OkHttp提供了取消请求的机制,二次封装时应确保提供取消请求的接口,并正确处理已取消的请求。 9. **连接...

    基于OkHttp的UI层回调封装

    UI层回调封装的核心在于将网络请求与UI更新解耦,避免在回调中直接操作UI,防止出现线程安全问题。下面是一种常见的封装方式: 1. **创建自定义Callback**: 首先,我们可以创建一个继承自`OkHttp3.Callback`的...

    ListView异步加载图片进度条

    2. 使用接口回调:通过定义接口,让ListView的Adapter可以监听图片加载的状态,从而更新UI和进度条。 3. 错误处理:对可能出现的异常进行捕获和处理,如网络错误、文件不存在等,提供友好的错误提示。 4. 注意资源...

    android asynTask 异步后台线程 各种操作

    values)`: 当在`doInBackground()`中调用`publishProgress()`时,此方法在主线程中被回调,用于更新UI展示任务进度。 - `onPostExecute(Result result)`: 在`doInBackground()`执行完毕后,在主线程中调用,用于...

    c#线程同步与异步编程

    事件处理则是另一种处理异步结果的模式,常用于UI编程,当异步操作完成时触发事件,更新界面状态。 异步编程的一个挑战是错误处理。由于异步操作的结果是在未来某个时刻返回,因此我们需要适当地捕获和处理可能出现...

    Android-对Okttp的Get请求的简单封装处理了网络回调的线程切换

    通过这样的封装,我们可以在不阻塞UI线程的情况下,优雅地处理网络请求和回调。不过,实际项目中可能还需要考虑更多细节,比如请求超时、重试策略、错误码处理等。此外,如果使用了现代的MVVM架构,可以考虑使用...

    android 异步封装调用Webservice

    4. **回调处理结果**:将解析后的数据通过接口或者观察者模式传递回主线程,更新UI。这样,即使网络请求耗时,也不会影响用户界面的流畅性。 5. **错误处理**:处理可能出现的网络异常、解析错误等情况,确保应用的...

    android listView 异步加载图片

    - **图片回调接口**:定义一个接口,用于在图片加载完成或失败时通知主线程进行UI更新。 - **图片占位符**:在图片加载过程中显示的默认图片。 - **图片错误图标**:在图片加载失败时显示的图标。 在实际使用中,...

    Android-dialog库可以在任意类内调用子线程或ui线程内均可显示

    然而,如果Dialog的创建过程耗时较长,可能会影响用户体验,这时就需要使用子线程来处理,然后通过Handler或`runOnUiThread()`回调到主线程显示Dialog。 Android-dialog库针对这些需求进行了优化,提供了更简洁的...

    iOS 图片异步加载Demo

    1. **异步加载的概念**:在iOS应用中,如果图片数据直接在主线程上加载,可能会导致界面卡顿,因为主线程主要负责UI更新。异步加载则将图片下载和解码操作放在后台线程,不影响用户界面的流畅性。 2. **URLSession*...

    iphone UITableView异步加载图片

    4. **下载完成回调**:当图片下载完成,将其添加到ImageCache,并通知AsyncImageView更新显示。 5. **内存管理**:为了防止内存泄漏,需要在适当的时候清理内存缓存,比如在应用进入后台时。 这样的设计可以显著...

    带返回值的异步委托和lambada结合

    在上述代码中,`callback` Lambda表达式定义了一个回调函数,当异步操作完成时,这个回调会在UI线程上执行,确保对UI的修改是线程安全的。 此外,C# 5.0引入了`async`/`await`关键字,它们使异步编程更加直观。但...

    多线程加载图片

    - **ImageView的封装**:添加加载状态(如占位符、加载中、加载失败图)和回调接口。 - **下载与解码分离**:下载图片为字节数组,然后在工作线程中解码为Bitmap,避免阻塞主线程。 8. **异步任务框架**: - **...

    android异步加载图片源码

    6. **图片加载状态监听**:提供加载成功的回调、加载失败的处理和加载进度的反馈,使开发者能够灵活处理各种情况。 7. **取消机制**:当图片视图不再可见(如用户滚动列表)时,可以取消正在进行的加载任务,避免...

    listView 异步加载图片

    - 回调监听:可以设置加载完成后的回调,以便在图片加载成功后更新UI。 6. **优化策略**: - 使用Placeholders和Fade-in效果:在图片加载过程中显示占位图,加载完成后淡入实际图片,提升用户体验。 - 图片压缩...

    封装GreenDao

    本文将深入探讨如何封装GreenDao,实现异步处理数据库操作,并确保结果回调到UI线程,以便在不阻塞用户界面的情况下更新数据。 首先,我们需要在项目中引入GreenDao库。在`build.gradle`文件中添加依赖: ```...

    IOS网络图片封装类

    它在后台线程下载图片,完成后自动更新UI,提高用户体验。 2. **内存缓存与磁盘缓存**:图片下载后,SDWebImage会自动将其存储到内存和磁盘中。下次再次请求同一图片时,可以从缓存中快速获取,大大提高了加载速度...

    QT C++ http get、post 同步异步请求

    - **异步请求**:请求在后台线程执行,不会阻塞主线程,允许UI继续更新。当请求完成时,可以通过信号和槽机制或回调函数来处理结果。 4. **netserver.cpp和netserver.h** 这两个文件很可能是实现HTTP请求功能的类...

    AQuery 异步调用

    回调处理则通过`AjaxCallback`实现,这个接口的实现类可以在UI线程中安全地更新UI。 **五、AQuery的实际应用场景** 1. **网络请求** AQuery非常适合处理JSON或XML格式的网络数据,如获取用户信息、加载新闻列表等...

Global site tag (gtag.js) - Google Analytics