android 异步post请求传参返回值处理

在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:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值