AsyncTask下载图片

最近在看很早以前写过的代码,把一些东西回顾一下。本文先回顾一下AsyncTask的基本使用.   AsyncTask说简单点就是 开启一个线程,并且把结果提交给ui线程。

Thread+Handler,不过里面做了一些封装 减轻了我们维护线程的麻烦。

先来写一个简单的例子,异步下载一个图片,显示到ImageView中。


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new MyTask().execute("http://www.baidu.com/img/bdlogo.png");//下载一个baidu的logo
    }

    //第一个参数的需要处理的数据,第二个参数是进度值,第三个参数是处理结果的类型

 

    public class MyTask extends AsyncTask<String,Integer,Bitmap> {
    	

		@Override
		protected void onPostExecute(Bitmap result) {
			Log.d("", "onPostExecute");
			 updateImageView(result);
		}

		@Override
		protected void onPreExecute() {
			Log.d("", "onPreExecute");
		}

		@Override
		protected Bitmap doInBackground(String... args) {
			String website = args[0];
			HttpURLConnection conn = null;
			InputStream ins = null;
			try {
				URL url = new URL(website);
				conn = (HttpURLConnection) url.openConnection();
				conn.setConnectTimeout(5000);
				conn.setDoInput(true);
				if (conn.getResponseCode() == 200) {
					Log.d("", "get image is ok");
					ins = conn.getInputStream();
					return BitmapFactory.decodeStream(ins);
				}
			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (ins != null) {
					try {
						ins.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			return null;
		}
    	
    }

  
	public void updateImageView(Bitmap result) {
		if (result != null) {
			ImageView img = (ImageView) findViewById(R.id.img);
			img.setImageBitmap(result);
			
		
		}
		
	}


}


onProgressUpdate这里没有写 是更新进度值的。通过调用publishProgress


注意事项:不能在线程中 new AsyncTask 只能在ui线程中使用。不能在一个对象上调用2次execute方法,只能用一次

下一篇将详细解破AsyncTask源码。 若有问题,请指出 谢谢。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android中使用OkHttp库下载图片需要创建一个OkHttp的工具类和一个实现回调接口的主Activity。首先,在工具类中创建一个静态的OkHttpClient对象,并通过该对象发送请求并获取响应体。然后,将响应体转化为流,再将流转化为Bitmap对象。接下来,在主Activity中设置ImageView的初始图片,然后执行AsyncTask下载图片。在AsyncTask的doInBackground方法中使用工具类获取图片的Bitmap对象,并将其返回。最后,在AsyncTask的onPostExecute方法中通过回调接口将Bitmap对象设置给ImageView。 以下是一个示例代码: 工具类OkHttpDownload.java: ```java public class OkHttpDownload { private static OkHttpClient okHttpClient; public static Bitmap getImageBitmap(String urlPath) { Bitmap bitmap = null; okHttpClient = new OkHttpClient(); URL url = null; try { url = new URL(urlPath); //获取请求对象 Request request = new Request.Builder().url(url).build(); //获取响应体 ResponseBody responseBody = okHttpClient.newCall(request).execute().body();<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [安卓第七天---okhttp的简单使用及异步任务(Asynctask)下载图片](https://blog.csdn.net/Autumn_leavess/article/details/84145839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值