AsyncTask(handler的封装类)

public class MainActivity extends Activity implements OnClickListener {

    private Button button;
    private TextView textView;
    private ImageView imageView;

    /**
     * 使用handler的封装类来实现获取网络连接(不需要开子线程)
     * AsyncTask<(在启动时,传递的参数类型),(在获取数据过程中,加载数据进度的类型,integer/void), 最终获取的数据的类型>
     * 三个参数的类型
     * 第一个代表输入到任务的参数类型,也即是doInBackground()的参数类型
       第二个代表处理过程中的参数类型,传入onProgressUpdate()方法的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过publishProgress()发消息传递给onProgressUpdate()一般用来更新界面
       第三个代表任务结束的产出类型,也就是doInBackground()的返回值类型,和onPostExecute()的参数类型
     * */
    AsyncTask<String, Void, String> task = new AsyncTask<String, Void, String>() {

        private StringBuffer sbBuffer;

        // 这个方法运行在子线程中

        protected String doInBackground(String... params) {
            String path = params[0];
            Log.i("myTag", "*******1111******" + path);
            URL url;
            try {
                url = new URL(path);
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                Log.i("myTag", "*******2222******");
                BufferedReader bReader = new BufferedReader(
                        new InputStreamReader(connection.getInputStream()));
                sbBuffer = new StringBuffer();
                String dataString = null;
                Log.i("myTag", "*************");
                while ((dataString = bReader.readLine()) != null) {
                    Log.i("myTag", "******3333*******");
                    sbBuffer.append(dataString);
                    Log.i("myTag", "*******44444******");
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return sbBuffer.toString();
        }

        // 下面这三个方法都是运行在主线程中

        /**
         * 此方法运行在主线程中,当任务执行时,此方法第一个被调用,通常做初始化操作
         * 
         * 在执行耗时操作之前做一些准备工作(eg:弹窗),因为这个方法会首先执行
         * */
        protected void onPreExecute() {
            super.onPreExecute();

        }

        /**
         * 运行在主线程中,当任务执行完毕时,回调此方法 参数:doInBackground方法执行后返回的结果
         * */
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            //textView.setText(result);
        }

    };

    AsyncTask<String, Void, Bitmap> task2 = new AsyncTask<String, Void, Bitmap>() {

        private Bitmap bitmap;

        /**
         * 运行在子线程中,进行耗时操作 参数一:是一个可变参数,指定数据的url,此参数类型由AsyncTask的泛型一决定
         * 返回值:将获取的数据返回给onPostExecute(Void result)方法
         * */
        protected Bitmap doInBackground(String... params) {
            String path = params[0];
            try {
                URL url = new URL(path);
                try {
                    HttpURLConnection connection = (HttpURLConnection) url
                            .openConnection();
                    connection.setRequestMethod("GET");
                    connection.connect();

                    bitmap = BitmapFactory.decodeStream(connection
                            .getInputStream());

                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        /**
         * 此方法运行在主线程中,当任务执行时此方法第一个被调用,通常做一些初始化操作
         * */
        protected void onPreExecute() {
            super.onPreExecute();
        }

        /**
         * 运行在主线程中,当任务执行完毕时,回调此方法
         * 
         * 这个方法参数的类型由doInBackground方法的返回值类型决定
         * */
        protected void onPostExecute(Bitmap result) {
            super.onPostExecute(result);
            imageView.setImageBitmap(result);
        }

        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

    };


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button1);
        textView = (TextView) findViewById(R.id.textView1);
        imageView = (ImageView) findViewById(R.id.imageView1);
        button.setOnClickListener(MainActivity.this);
    }

    public void onClick(View v) {
        switch (R.id.button1) {
        case R.id.button1:

            String path = "http://v.juhe.cn/toutiao/index?type=yule&key=c8fe066ae002d20891fbc48a1783a1ee";
            task.execute(path);

            String path2 = "http://p4.so.qhmsg.com/t010a5748577f3d4e3e.jpg";
            task2.execute(path2);

            break;

        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值