AsycTask(handler的封装类)

来源:互联网 发布:顺义握奇数据怎么样 编辑:程序博客网 时间:2024/06/06 15:11
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