在android中,如果main线程中需要出现一些比较耗时的操作的时候,应该在主线程之外进行异步的处理,然后将返回的结果进行判断。android系统中有HttpPost类直接支持post请求,本代码就使用了HttpPost来请求。AsyncTask是一个典型的异步请求类,实现该类,复写其中会涉及到的方法。实现异步的请求与返回值的处理。
异步请求代码,here:
class PageTask extends AsyncTask<Map<String,String>, Integer, String> {
// 可变长的输入参数,与AsyncTask.exucute()对应
Context context;
public PageTask(Context context) {
this.context = context;
}
@Override
protected String doInBackground(Map<String,String>... params) {
String s = "";
s = PostUtil.submitPostData(params[0], Constant.CODING,
Constant.BASE_URL + Constant.TOKEN_ADD_URL);
User user = JsonUtil.parseUserFromJson(s);
// System.out.println("post之后的一个返回:-----"+user.toString());
// 返回结果
return s;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(String result) {
// 返回HTML页面的内容
//doInBackground返回时触发,换句话说,就是doInBackground执行完后触发
//这里的result就是上面doInBackground执行后的返回值,所以这里是"执行完毕"
System.out.println("onPostExecute");
User user = JsonUtil.parseUserFromJson(result);
loginContent.setVisibility(View.VISIBLE);
loginContent.setText(user.getLatestToken());
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
// 任务启动,可以在这里显示一个对话框,这里简单处理
}
@Override
protected void onProgressUpdate(Integer... values) {
// 更新进度
System.out.println("" + values[0]);
}
}
and,post请求的代码,here:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class PostUtil {
/**
* 同步方式请求
* @param mapParams
* @param encode
* @param urlStr
*/
public static String submitPostData(Map <String, String> mapParams,String encode,String urlStr) {
String result = "";
// 1,创建HttpPost对象
HttpPost httpPost = new HttpPost(urlStr);
//2, 设置HTTP POST请求参数 须用NameValuePair对象
List<NameValuePair> params = new ArrayList<NameValuePair>();
for (String key : mapParams.keySet()) {
params.add(new BasicNameValuePair(key, mapParams.get(key)));
}
HttpResponse httpResponse = null;
try {
//3,设置httpPost请求参数
httpPost.setEntity(new UrlEncodedFormEntity(params, encode));
httpResponse = new DefaultHttpClient().execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 4,getEntity来获得返回结果
result = EntityUtils.toString(httpResponse.getEntity());
// System.out.println("submitPostData----->"+result);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
其中的类库is here: