AsyncTask异步通信工具

本文介绍如何在Android应用中使用AsyncTask类来处理网络请求,并通过ProgressDialog显示请求进度。通过设置自定义进度条样式、按钮及取消监听器,实现了一个完整的网络请求流程。包括创建HttpClient实例,发送GET请求,读取响应内容,并更新UI显示进度和最终结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class PageTask extends AsyncTask<String, Integer, String> {
        
// 可变长的输入参数,与AsyncTask.exucute()对应
        ProgressDialog pdialog;
        
public PageTask(Context context){
            pdialog 
= new ProgressDialog(context, 0);   
            pdialog.setButton(
"cancel"new DialogInterface.OnClickListener() {
             
public void onClick(DialogInterface dialog, int i) {
              dialog.cancel();
             }
            });
            pdialog.setOnCancelListener(
new DialogInterface.OnCancelListener() {
             
public void onCancel(DialogInterface dialog) {
              finish();
             }
            });
            pdialog.setCancelable(
true);
            pdialog.setMax(
100);
            pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pdialog.show();


        }
        @Override
        
protected String doInBackground(String... params) {

            
try{

               HttpClient client 
= new DefaultHttpClient();
               
// params[0]代表连接的url
               HttpGet get = new HttpGet(params[0]);
               HttpResponse response 
= client.execute(get);
               HttpEntity entity 
= response.getEntity();
               
long length = entity.getContentLength();
               InputStream is 
= entity.getContent();
               String s 
= null;
               
if(is != null) {
                   ByteArrayOutputStream baos 
= new ByteArrayOutputStream();

                   
byte[] buf = new byte[128];

                   
int ch = -1;

                   
int count = 0;

                   
while((ch = is.read(buf)) != -1) {

                      baos.write(buf, 
0, ch);

                      count 
+= ch;

                      
if(length > 0) {
                          
// 如果知道响应的长度,调用publishProgress()更新进度
                          publishProgress((int) ((count / (float) length) * 100));
                      }

                      
// 让线程休眠100ms
                      Thread.sleep(100);
                   }
                   s 
= new String(baos.toByteArray());              }
               
// 返回结果
               return s;
            } 
catch(Exception e) {
               e.printStackTrace();

            }

            
return null;

        }

        @Override
        
protected void onCancelled() {
            
super.onCancelled();
        }

        @Override
        
protected void onPostExecute(String result) {
            
// 返回HTML页面的内容
            message.setText(result);
            pdialog.dismiss(); 
        }

        @Override
        
protected void onPreExecute() {
            
// 任务启动,可以在这里显示一个对话框,这里简单处理
            message.setText(R.string.task_started);
        }

        @Override
        
protected void onProgressUpdate(Integer... values) {
            
// 更新进度
              System.out.println(""+values[0]);
              message.setText(
""+values[0]);
              pdialog.setProgress(values[
0]);
        }

     }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值