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操作,这样会出错