关于android Httputils请求问题

在android开发中不可避免的要有服务器端请求数据的过程,幸好android是个开源的,大大节省了开发时间。

Xutils框架中的Httputils,很好的解决了服务器端请求数据的问题。

Get请求无可厚非,比较简单

无外乎就是

HttpUtils httputils=new HttpUtils();

httputils.send(HttpMethod.GET,url,new RequestCallBack<String>(){

                    @Override
                                    public void onLoading(long total,
                                            long current, boolean isUploading) {
                                        // TODO Auto-generated method stub
                                        super.onLoading(total, current,
                                                isUploading);

                                    }

                                    @Override
                                    public void onSuccess(
                                            ResponseInfo<String> responseInfo) {
                                       
                                            }

                   

                                    @Override
                                    public void onFailure(HttpException error,
                                            String msg) {
                                        // TODO Auto-generated method stub
                                 
                                    }

});

但是post请求在需要的条件比较多,在工作中出现一些小的bug,着实头疼了好久

遇到的问题:

   1.post请求json数据上传:post请求上传数据基本上是以json格式上传的,要将json数据添加到Params的Header中

RequestParams params = new RequestParams();
				params.addHeader("Content-Type", "application/json");
				try {
					params.setBodyEntity(new StringEntity(“封装好的json”));
				} catch (UnsupportedEncodingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
2.post请求上传json数据后台不识别:上传json时,到后台发现中文汉字变成了“?”在Header中添加了U8编码也不好使,后来发现在HttpEntity中也要添加U8。

HttpEntity bodyEntity = null;
				try {
					bodyEntity = new StringEntity(json,HTTP.UTF_8);
				} catch (UnsupportedEncodingException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
3.post请求添加cookie:在做登录时,登录成功后会返回一个cookie,用来记录登录状态。由于服务器要识别主机地址等信息。之后的一些操作不但要上传jison数据,还有将cookie一块上传,否则会请求失败。

在登录的onSuccess()中保存cookie在SharedPreferences中

DefaultHttpClient  httpClient = (DefaultHttpClient) httpUtils.getHttpClient();
								MyCookieStore.cookieStore = httpClient.getCookieStore();
								CookieStore cs = httpClient.getCookieStore();
								List<Cookie> cookies = cs.getCookies();
								String denglucookie = null;
								for (int i = 0; i < cookies.size(); i++) {
									if ("JSESSIONID".equals(cookies.get(i).getName())) {
										denglucookie = cookies.get(i).getValue();
										break;
									}
								}
								sp = getSharedPreferences("LOGIN_STATUS", 0);
								SharedPreferences.Editor edit = sp.edit();
								edit.putString("denglucookie", denglucookie);
								edit.commit();
在其他post请求中添加cookie

RequestParams params = new RequestParams();
				HttpEntity bodyEntity = null;
				try {
					bodyEntity = new StringEntity(json,HTTP.UTF_8);
				} catch (UnsupportedEncodingException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				SharedPreferences sp = activity.getSharedPreferences("LOGIN_STATUS", 0);
				String denglucookie = sp.getString("denglucookie", "无法获取数据");
				Log.e("cookie", denglucookie);
				params.addHeader("Content-Type","application/json;charset=UTF-8");
				params.setBodyEntity(bodyEntity);
				params.setHeader("Cookie", "JSESSIONID="+denglucookie);

工作中会遇到许许多多奇葩的问题,遇到问题积极的解决,并记录下来。会帮助我们成长。

有不对的地方大家请指出,与君共勉,谢谢!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值