AsyncTask简单实例

此文,仅做为个人学习Android,记录成长以及方便复习!

创建布局文件,一个ImageView用来加载网络图片,一个ProgressBar用来加载图片未完成前显示Loading....

其中ProgressBar的android:visibility="gone"是隐藏组件

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"/>

</RelativeLayout>

因为要去从网络获取图片,所以在清单文件

AndroidManifest.xml添加网络访问权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

然后就是Activity文件了

定义一个内部类继承了AsyncTask,实现方法获取图片,并显示和隐藏ProgressBar

MainActivity.java

package com.example.qqazl001.asynctaskdemo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.URL;
import java.io.InputStream;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity {
    private ImageView image;//声明ImageView
    private ProgressBar progressBar;//声明ProgressBar
    //想要下载的图片地址
    private String URL="https://www.baidu.com/img/bd_logo1.png?where=super";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化ImageView  ProgressBar
        image = (ImageView)findViewById(R.id.image);
        progressBar = (ProgressBar)findViewById(R.id.progressBar);
        new MyAsyncTask().execute(URL);
    }

    //创建内部类,继承AsyncTask<第一个参数URL类型,第二参数进度值类型,第三个返回值类型>
    public class MyAsyncTask extends AsyncTask<String,MediaStore.Video,Bitmap>{

        //doInBackround开始之前,执行该方法,一般进行初始化
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //显示隐藏了的ProgressBar
            progressBar.setVisibility(View.VISIBLE);
        }

        //必须实现的方法
        @Override
        protected Bitmap doInBackground(String... strings) {
            //传进来的是一个可变长数组,也就是说,我们可以传进不止一个参数(通过execute()传进来),
            // 这些参数依次存在于这个数组中。现在只有一个参数,所以只要写个params[0]取出对应的URL即可。
            String url= strings[0];
            Bitmap bitmap = null;//存放取得的图像
            URLConnection connection;//定义网络连接对象
            InputStream inputStream;//数据输入流
            try {
                connection = new URL(url).openConnection();//获取网络连接对象
                inputStream =  connection.getInputStream();//获取输入流
                //输入流包装成缓冲流提高速度
                BufferedInputStream bis = new BufferedInputStream(inputStream);

                //制造点延迟,为了看测试效果
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                //获取到Bitmap
                bitmap = BitmapFactory.decodeStream(bis);
                //关闭输入流
                inputStream.close();
                //关闭输入缓冲流
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        //doInBackground运行之后获得返回值,然后运行此方法,
        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            progressBar.setVisibility(View.GONE);
            image.setImageBitmap(bitmap);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值