Android提交Http请求时,显示对话框进度条并修改UI元素

网上找了很多关于Android在后台进行数据操作,界面显示进度条资料时,发现90%网上的博客、资料都是相同的内容,没有一点实质性的可用代码,真怀疑大家都是抄袭的API Demo中的。现在正好也用到在Android客户端提交数据量大的Http请求,想通过在提交服务器,并在处理时显示进度条,以及处理完后接收返回的结果,根据界面修改主线程UI界面。把相关代码贴出来供大家参考.

 

在Android SDK1.5以上,Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护。要使用AsyncTask工作我们要提供三个泛型参数,并至少重载一个方法。

 

现在主要介绍下参数以及相关方法:

泛型参数:

  Param ,任务执行器需要的数据类型

  Progress 后台计算中使用的进度单位数据类型

  Result 后台计算返回结果的数据类型

  如果有些参数是可以设置为不使用的,只要传递为Void型即可,比如Progress

 

方法:

 

  onPreExecute(),执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。

  doInBackground(Params...),后台进程执行的具体计算在这里实现,doInBackground(Params...)是AsyncTask的关键,此方法必须重载。

  onProgressUpdate(Progress...),运行于UI线程。如果在doInBackground(Params...)中使用了publishProgress(Progress...),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。

  onPostExecute(Result),运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params...)的返回值,此方法也要经常重载。

 

AsyncTask类主要的东西就这些了,下面给出一个代码示例:

[java]  view plain copy
  1. public class ProcessApplyActivity extends Activity  
  2. {  
  3.   private Button mButton1;  
  4.   private TextView mTextView1;  
  5.   private int operation;  
  6.   public ProgressDialog myDialog = null;  
  7.     
  8.   @Override  
  9.   public void onCreate(Bundle savedInstanceState)  
  10.   {  
  11.     super.onCreate(savedInstanceState);  
  12.     setContentView(R.layout.submitapply);  
  13.       
  14.     Bundle bundle = this.getIntent().getExtras();  
  15.     CardApplyResquest request = (CardApplyResquest)bundle.getSerializable("cardrequest");  
  16.     operation = bundle.getInt("operation");  
  17.       
  18.     mButton1 =(Button) findViewById(R.id.myButton1);  
  19.     mTextView1 = (TextView) findViewById(R.id.myTextView1);  
  20.     mButton1.setOnClickListener(myShowProgressBar);  
  21.       
  22.     final CharSequence strDialogTitle = getString(R.string.str_dialog_title);  
  23.     final CharSequence strDialogBody = getString(R.string.str_dialog_body);  
  24.     // 显示对话框进度条  
  25.     myDialog = ProgressDialog.show  
  26.                (  
  27.                  ProcessApplyActivity.this,  
  28.                  strDialogTitle,  
  29.                  strDialogBody,   
  30.                  true  
  31.                );  
  32.       
  33.     // 后台进行Http Request处理  
  34.    new SubmitApplyTask().execute(request);  
  35.   }  
  36.     
  37.   private OnClickListener myShowProgressBar = new OnClickListener()  
  38.   {  
  39.       @Override  
  40.     public void onClick(View arg0)  
  41.     {  
  42.         Intent intent = new Intent();  
  43.         intent.setClass(ProcessApplyActivity.this, MainActivity.class);  
  44.         startActivity(intent);  
  45.         ProcessApplyActivity.this.finish();   
  46.     }  
  47.   };  
  48.     
  49.     
  50.   /** 
  51.    * 创建一个提交Http请求的异步任务 
  52.    * @author li.yiqun 
  53.    *CardApplyResquest:需要处理的数据类型 
  54.    *Void:第二个参数,不需要,定义为Void 
  55.    *Integer:返回结果类型为Integer 
  56.    */  
  57.   private class SubmitApplyTask extends AsyncTask<CardApplyResquest,Void,Integer>  
  58.   {  
  59.         
  60.     @Override  
  61.     protected Integer doInBackground(CardApplyResquest... params)   
  62.     {  
  63.         CardApplyService service = new CardApplyService();  
  64.         return service.submit(params[0],operation);  
  65.     }  
  66.       
  67.       
  68.     @Override  
  69.     protected void onPostExecute(Integer result)   
  70.     {  
  71.         myDialog.dismiss();  
  72.         if(result == 200)  
  73.         {  
  74.             mTextView1.setText("申请资料提交成功");  
  75.         }  
  76.         else  
  77.         {  
  78.             mTextView1.setText("申请资料提交出错");  
  79.         }  
  80.         mButton1.setVisibility(0);  
  81.     }  
  82.    }  
  83. }  


转自:http://blog.csdn.net/minyskirt/article/details/5857553

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值