AsyncTask应用,获取在线网络图标Bitmap数据

本文是对AsynckTask的应用,在获取网络数据中一般需要在主线程中另开一个子线程来进行网络数据的获取,但是会出现获取数据不同步的问题,使用AsyncTask可以简单的解决这一问题。下面以获取网络图标的bitmap数据为例。

  1. 创建AsyncTask
//通过AsyncTask获取图标

//创建获取AsyncTask返回的bitmap数据接口
public interface AsyncResponse {
    void onDataReceivedSuccess(Bitmap bitmap);
    void onDataReceivedFailed();
}

private class DownloadAsyncTask extends AsyncTask<String, Void, Bitmap> {

    public AsyncResponse asyncResponse;
    public void setOnAsyncResponse(AsyncResponse asyncResponse) {
        this.asyncResponse = asyncResponse;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        if (bitmap != null) {
            asyncResponse.onDataReceivedSuccess(bitmap);//将结果传给回调接口中的函数
        } else {
            asyncResponse.onDataReceivedFailed();
        }
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        Bitmap bitmap = null;
        try {
            URL iconUrl = new URL(params[0]);
            URLConnection conn = iconUrl.openConnection();
            HttpURLConnection http = (HttpURLConnection) conn;
            int length = http.getContentLength();
            conn.connect();
            // 获得图像的字符流
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is, length);
            bitmap = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();// 关闭流
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }

}
  1. 通过自定义的返回接口获取数据
DownloadAsyncTask test = new DownloadAsyncTask();
test.execute(url);
test.setOnAsyncResponse(new AsyncResponse() {
    @Override
    public void onDataReceivedSuccess(Bitmap bitmap){
    //从这里取得bitmap
    Bitmap bm = bitmap;
    }
    @Override
    public void onDataReceivedFailed() {
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值