经常有的时候接口传参数的方式是个json串 也叫raw格式 那应该怎么传怎么封装呢
代码如下:这个方法同样放在我上一篇文章提到的 简单封装 okHttp 请求和回调
中的HttpUtil 里即可 url就是你的接口地址 这里重点讲一下json
// raw格式 序列化的JSON字符串 直接传json串
public int doPostTask(String url, String json, final int markId){
// String sessionId = ApiUrl.ADMIN_TOKEN ;
String sessionId = SPUtils.getPrefString(context,"Admin-Token");
httpUtil.doPostTask2(url,sessionId,json,new HttpUtil.HttpCallback<JSONObject>(){
@Override
public JSONObject process(String data) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(data);
code = jsonObject.getInt("code");
} catch (JSONException e) {
e.printStackTrace();
}
if(code == 500){
Log.e("TAG", "code == "+code);
mHttpCallbackListener.onHttpPost(data,500);
}else{
// 接口回调 去解析
mHttpCallbackListener.onHttpPost(data,markId);
}
return null;
}
@Override
public void onException(int type) {
}
@Override
public void postProcess(JSONObject result) {
}
});
return code ;
}
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
private Request createPostRequest2(String url, String sessionId,String json)
{
RequestBody formBody = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
// .header(KEY_COOKIE, SESSIONID_PREFIX + sessionId)
.header(ADMIN_TOKEN, sessionId)
//.addHeader(KEY_ACCEPT, TYPE_JSON)
.post(formBody)
.build();
return request;
}
json参数:
说白了 json 就是个字符串 把请求参数拼接起来
例如:JSONObject jsonObject=new JSONObject();
jsonObject.put(“Id”,7);
jsonObject.put(“name”,name);
String json = jsonObject.toString(); // 得到这个json 用上面那个方法就可以请求啦 类似于get拼接 但还是有区别
同样可以用一个自定义Ben对象 对这个对象赋值以后生成json
例如:
User user = new User;
user .setId =1 ;
user .name= “怪咖” ;
Gson gson = new Gson();
String json =gson .toJson(user);// 同样可以得到json 一旦参数很多的时候 用对象是很方便的
接下来同样封装一个公共方法同样放在上一篇文章提到的CoreHttpHelper
同样用自定义接口把参数返回给调用者去解析 详情看我上一篇文章简单封装 okHttp 请求和回调
// raw格式 序列化的JSON字符串 直接传json串
public int doPostTask2(String url, String json, final int markId){
// String sessionId = ApiUrl.ADMIN_TOKEN ;
String sessionId = SPUtils.getPrefString(context,"Admin-Token");
httpUtil.doPostTask2(url,sessionId,json,new HttpUtil.HttpCallback<JSONObject>(){
@Override
public JSONObject process(String data) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(data);
code = jsonObject.getInt("code");
} catch (JSONException e) {
e.printStackTrace();
}
if(code == 500){
Log.e("TAG", "code == "+code);
mHttpCallbackListener.onHttpPost(data,500);
}else{
// 接口回调 去解析
mHttpCallbackListener.onHttpPost(data,markId);
}
return null;
}
@Override
public void onException(int type) {
}
@Override
public void postProcess(JSONObject result) {
}
});
return code ;
}