网上找了很多关于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类主要的东西就这些了,下面给出一个代码示例:

public class ProcessApplyActivity extends Activity { private Button mButton1; private TextView mTextView1; private int operation; public ProgressDialog myDialog = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.submitapply); Bundle bundle = this.getIntent().getExtras(); CardApplyResquest request = (CardApplyResquest)bundle.getSerializable("cardrequest"); operation = bundle.getInt("operation"); mButton1 =(Button) findViewById(R.id.myButton1); mTextView1 = (TextView) findViewById(R.id.myTextView1); mButton1.setOnClickListener(myShowProgressBar); final CharSequence strDialogTitle = getString(R.string.str_dialog_title); final CharSequence strDialogBody = getString(R.string.str_dialog_body); // 显示对话框进度条 myDialog = ProgressDialog.show ( ProcessApplyActivity.this, strDialogTitle, strDialogBody, true ); // 后台进行Http Request处理 new SubmitApplyTask().execute(request); } private OnClickListener myShowProgressBar = new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(ProcessApplyActivity.this, MainActivity.class); startActivity(intent); ProcessApplyActivity.this.finish(); } }; /** * 创建一个提交Http请求的异步任务 * @author li.yiqun *CardApplyResquest:需要处理的数据类型 *Void:第二个参数,不需要,定义为Void *Integer:返回结果类型为Integer */ private class SubmitApplyTask extends AsyncTask<CardApplyResquest,Void,Integer> { @Override protected Integer doInBackground(CardApplyResquest... params) { CardApplyService service = new CardApplyService(); return service.submit(params[0],operation); } @Override protected void onPostExecute(Integer result) { myDialog.dismiss(); if(result == 200) { mTextView1.setText("申请资料提交成功"); } else { mTextView1.setText("申请资料提交出错"); } mButton1.setVisibility(0); } } }

更多相关文章

  1. Android root检测方法小结
  2. android之计时器(Chronometer)的使用以及常用的方法
  3. win7与android设备通过蓝牙串口的连接方法
  4. 分享一种最简单的Android打渠道包的方法
  5. Android下Activity结束(finish())之后没有释放内存问题的解决方法
  6. Android工程:引用另一个Android工程的方法详解
  7. Android后台保活实践总结:即时通讯应用无法根治的“顽疾”
  8. android中px,dp,sp的区别与使用方法
  9. Android核心分析 之一--------分析方法论探讨之设计意图

随机推荐

  1. mysql字符集相关总结
  2. mysql-canal-rabbitmq 安装部署超详细教
  3. 详解记录MySQL中lower_case_table_names
  4. 详解mysql查询缓存简单使用
  5. gorm操作MySql数据库的方法
  6. MySQL5.7 集群配置的步骤
  7. MySQL 普通索引和唯一索引的区别详解
  8. Navicat Premium如何导入SQL文件的方法步
  9. Windows下通过cmd进入DOS窗口访问MySQL数
  10. Mysql快速插入千万条数据的实战教程