在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);
工作中会遇到许许多多奇葩的问题,遇到问题积极的解决,并记录下来。会帮助我们成长。
有不对的地方大家请指出,与君共勉,谢谢!