Android异步任务处理之AsyncTask异步操作类的使用方法1(不含onCancelled部分)



创建一个新工程LearnAsyncTask,一个空Activity,上面放置几个控件

控件

属性

功能描述

EditText

id="@+id/etUri"
hint="
请输入你要获取网络数据的Uri"

text="http://www.sina.com.cn"

 

Button

text="读取http数据"
id="@+id/btnRead"
/

 

ScrollView

 

由于读取的内容可能很长,会好几页,所有用此包裹TextView

TextView

id="@+id/tvRead"
hint="
读取的数据http数据将在此显示"

 

< 

  

 

本程序介绍:AsyncTask 的用法,包括传入参数、设定后台任务doInBackground、过程信息的处理(publishProgress方法和onProgressUpdate事件)等

AsyncTask 第一个参数:是传入的对象(用户对AsyncTask进行初始化的一些数据),第二个参数:处理的过程中返回值的数据类型;第三个参数:返回结果的数据类型
/
AsyncTask实例对象必须实现(原来未实现)doInBackground方法,该方法与线程的run方法非常类似,执行后台的耗时操作,不能在此代码中直接操作UI

构成函数的第一个参数会传给doInBackgroundparams的第一个数据

只可以execute一次,执行多次就报异常

 
可能需要重写的方法和事件
 
doInBackground
不要手工调用
该方法中调用的publishProgress()中传入的数据类型与AsyncTask的第二个参数类型必须一致,否则会报错。也与onProgressUpdate的参数一致
 
 
onCancelled
 
终止操作(本实例中不做讲解,有空再讲解哦)
 
onCancelled(String s)
 
 
终止操作(本实例中不做讲解,有空再讲解哦)
 
onPostExecute
不要手工调用,AsyncTask执行之后会调用该事件
 
onPreExecute
 
不要手工调用,AsyncTask执行之前会调用该事件
 
onProgressUpdate
 
执行任务的过程中,用于对外发布当前执行任务的进度。参数与声明AsyncTask的第二个参数一致
 
 
 
 
 

 

public class MainActivity extends AppCompatActivity {

    private TextView tvRead;

    private EditText etUri;

  

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

  

        tvRead= (TextView) findViewById(R.id.tvRead);

        etUri= (EditText) findViewById(R.id.etUri);

        findViewById(R.id.btnRead).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                new ReadHttpAsyncTask().execute(etUri.getText().toString());

                

            }

        });

    }

  

    //读取http数据的方法

    private class ReadHttpAsyncTask extends AsyncTask<String, Integer, String> {

        @Override

        protected void onCancelled() {

            super.onCancelled();

        }

  

        @Override

        protected void onCancelled(String s) {

            super.onCancelled(s);

        }

  

        @Override

        protected void onPostExecute(String s) {

            tvRead.setText(s);

            super.onPostExecute(s);

        }

  

        @Override

        protected void onPreExecute() {

            super.onPreExecute();

        }

  

        @Override

        protected void onProgressUpdate(Integer... values) {

            super.onProgressUpdate(values);

            setTitle("已经完成比例"+Integer.toString(values[0]));

        }

  

        //*doInBackground中不能直接操作UI

        @Override

        protected String doInBackground(String... params) {

            

            try {

                URL url = new URL(params[0]);

                URLConnection connection = url.openConnection();

                int  total=connection.getContentLength();  //获取要读取的内容总数量

  

                InputStream is = connection.getInputStream();

                InputStreamReader isr = new InputStreamReader(is,"utf-8");

                BufferedReader br = new BufferedReader(isr);

                String line;

                StringBuilder stringBuilder=new StringBuilder();

  

                while((line = br.readLine()) != null){

                    stringBuilder.append(line);

                    System.out.println("===输出信息到Logcat:" + line);

                    //注意publishProgress中传入的数据类型与AsyncTask的第二个参数类型必须一致,否则会保存

                    publishProgress(stringBuilder.toString().length()/total);

                    

                }

                br.close();

                isr.close();

                is.close();

  

                return stringBuilder.toString();

            } catch (MalformedURLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

  

            return null;

        }

  

    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值