AsyncTask 确实简单易用,基本上写登陆,注册这种简单的网络访问,可以使用它,但对于多线程这个确实不太好。关于AsyncTask的优缺点可以百度搜索下。
下面是具体的一个实例
1. 新建一个自己的AsyncTask类 就是继承AsyncTask
2. 在合适的地方执行AsyncTask类
private class DelAsyncTask extends AsyncTask<String, Integer, String> { @Override protected void onPreExecute() { // onPreExecute方法用于在执行后台任务前做一些UI操作 } @Override protected String doInBackground(String... params) { // doInBackground方法内部执行后台任务,不可在此方法内修改UI String urlStr = new UrlsString().affectionAddUrl + "?user_tel=" + params[0] + "&" + "relation_tel=" + params[1] ; String resonseStr = new BasicHttpClient().httpGet(urlStr); // httpGet请求,方法我自己封装了一下 if(resonseStr == null){ return "0"; } return resonseStr ; } @Override protected void onPostExecute(String rs) { // onPostExecute方法用于在执行完后台任务后更新UI,显示结果 if(rs.equals("0")) { ToastUtil.showToast(getActivity(),"操作失败"); }else if(rs.equals("1")){ // 删除成功 List<AffectionTmp> tmp = mList2 ; mList2 = new AffectionUtils().deleteposition(tmp, selected_position); mAdapter.setmList(mList2); listgoodfeel.setAdapter(mAdapter); } } @Override protected void onProgressUpdate(Integer... values) { // onProgressUpdate方法用于更新进度信息 super.onProgressUpdate(values); } @Override protected void onCancelled() { // onCancelled方法用于在取消执行中的任务时更改UI super.cancel(false); } }
new DelAsyncTask().execute(mList2.get(pos).getUserTel() ,mList2.get(pos).getAffectionTel() ); // 传3个String值,按照自己的需求来
AsyncTask执行的时候把需要的参数传进去就行了,然后 doInBackground(String… params){} 这里得到参数,并且得在这里执行相应的网络访问,并返回结果;接着void onPostExecute(String rs) {}中得到自己上面返回的结果进行相应的UI处理和页面跳转。
注意不能在doInBackground 里面进行UI操作,这样会出错