1. 概述
这篇文章主要记录下客户端给服务器传递数据经常用到的2种方式:
1>:给服务器传递json,每个字段都是单独的,不含有list集合;
2>:给服务器传递json,里边有一个 list集合,集合中包含有多个对象,除过list集合之外,其余都是单个字段;
第二种方式数据格式如下:

图片.png
2. 实现方式如下
前提:
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/7/26 14:03
* Version 1.0
* Params:
* Description: 从服务器返回的Json 转为 String
*/
public class Json2String {
public static String buildRequestParams(Object params){
Gson gson=new Gson();
String jsonStr=gson.toJson(params);
return jsonStr;
}
}
1>:对于第一种:直接把传递的字段放到put中即可;
private void getLogin() {
LoadingDialogUtils.showDialog(this);
String jsonHead="";
Map<String,Object> mapHead=new HashMap<>();
mapHead.put("mobile", mPhone);
mapHead.put("loginPasswd", mPwd);
mapHead.put("ver", VersionUpdateUtils.getVersionCode(BaseApplication.getContext())+"");
jsonHead=buildRequestParams(mapHead);
OkHttpUtils
.postString()
.url(CommonUrl.LOGIN)
.mediaType(MediaType.parse("application/json; charset=utf-8"))
.content(jsonHead)
.build()
.execute(new StringCallback() {
private VCode_Bean2 codeBean2;
@Override
public void onError(Call call, Exception e, int id) {
// ToastUtils.showMyToast(LoginActivity.this,ToastUtils.OPTION_FAIL,"登录失败"+e.getMessage());
LoadingDialogUtils.dissmisDialog();
}
@Override
public void onResponse(String response, int id) {
Log.e("TAG" , "登录返回信息:"+response) ;
});
}
2>:对于第二种:比如请求一个接口,获取到 一个list集合,然后遍历 list集合,在for循环里边:
1>:随便定义一个 javabean对象,并且定义所有需要传递的字段;
2>:在最外层定义一个list集合,类型就是这个 javabean类型;
3>:把 这个javabean对象添加到集合中;
4>:然后使用之前给服务器传递json数据的方式,把单独的字段比如msg、code和list集合都按照之前传递方式一样就可以;
代码如下:
1>:请求一个接口,获取一个list集合,遍历list集合, 然后定义 一个 javabean对象,并且定义所有需要传递的字段,并且在最外层定义一个list集合,把 list遍历出来的所有数据全部设置给 javabean 的所有字段,然后把 这个 javabean对象添加到 list集合中
// 在方法最外层定义的一个list集合,且类型就是这个 javabean 类型的
private List<C2SBean> c2SBeanList = new ArrayList<C2SBean>() ;
/**
* 请求一个接口,获取list集合数据
*/
private void getBankListData() {
String jsonHead="";
Map<String,Object> mapHead=new HashMap<>();
mapHead.put("userId", PrefUtils.getString(BankCardListActivity.this , "myId" , ""));
mapHead.put("ver", VersionUpdateUtils.getVersionCode(BaseApplication.getContext())+"");
mapHead.put("token", PrefUtils.getString(BaseApplication.getContext() , "myToken" , ""));
jsonHead=buildRequestParams(mapHead);
OkHttpUtils
.postString()
.url(CommonUrl.BANK_LIST)
.mediaType(MediaType.parse("application/json; charset=utf-8"))
.content(jsonHead)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
ToastUtils.showMyToast(BankCardListActivity.this,ToastUtils.OPTION_FAIL,"--"+e.getMessage());
}
@Override
public void onResponse(String response, int id) {
BankListBean bankListBean = new Gson().fromJson(response , BankListBean.class) ;
if (bankListBean != null){
if (!TextUtils.isEmpty(bankListBean.getCode()) && bankListBean.getCode().equals("0")) {
listDatas = bankListBean.getData();
if (listDatas != null && listDatas.size()>0){
for (int i = 0; i < listDatas.size(); i++) {
// TODO 用于测试给服务器传递数据
// 1. 随便定义一个 javabean对象,并且定义所有需要传递的字段;
// 2. 在最外层定义一个list集合,类型就是这个 javabean类型;
// 3. 把 这个javabean对象添加到集合中;
// 4. 然后使用之前给服务器传递json数据的方式,把单独的字段比如msg、code和list集合都按照之前传递方式一样就可以;
/*C2SBean c2SBean = new C2SBean() ;
c2SBean.setAcpToken(listDatas.get(i).getAcpToken());
c2SBean.setAcpTrid(listDatas.get(i).getAcpTrid());
c2SBean.setBin(listDatas.get(i).getBin());
c2SBean.setId(listDatas.get(i).getId());
c2SBean.setIsDeleted(listDatas.get(i).getIsDeleted());
c2SBean.setIsEnabled(listDatas.get(i).getIsEnabled());
c2SBean.setIsLatest(listDatas.get(i).getIsLatest());
c2SBean.setRevId(listDatas.get(i).getRevId());
c2SBean.setRevTime(listDatas.get(i).getRevTime());
c2SBean.setUserId(listDatas.get(i).getUserId());
c2SBean.setBankName(listDatas.get(i).getBankName());
c2SBeanList.add(c2SBean) ;*/
}
/*testC2SBean(c2SBeanList) ;*/
}
}
}
});
}
2>:然后使用之前给服务器传递json数据的方式传递就可以:
/*************** 给服务器传递json数据中含有list集合,list集合中包含多个对象,
* 数据格式和BankListBean一样 ************/
private void testC2SBean(List<C2SBean> c2SBeanList) {
String jsonHead="";
Map<String,Object> mapHead=new HashMap<>();
mapHead.put("msg", "查询成功");
mapHead.put("code", "0");
mapHead.put("list", c2SBeanList);
jsonHead=buildRequestParams(mapHead);
Log.e("TAG" , "jsonHead:"+jsonHead) ;
}
3>:C2SBean对象如下:
/**
* Created by Administrator on 2018/7/26.
*/
public class C2SBean {
private String acpToken;
private String acpTrid;
private String bin;
private int id;
private int isDeleted; // 0表示正常 1表示删除这张卡
private int isEnabled;
private int isLatest;
private int revId;
private long revTime;
private String userId;
private String bankName ;
public String getBankName() {
return bankName;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
private Bitmap bitmap ;
public Bitmap getBitmap() {
return bitmap;
}
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
public String getAcpToken() {
return acpToken;
}
public void setAcpToken(String acpToken) {
this.acpToken = acpToken;
}
public String getAcpTrid() {
return acpTrid;
}
public void setAcpTrid(String acpTrid) {
this.acpTrid = acpTrid;
}
public String getBin() {
return bin;
}
public void setBin(String bin) {
this.bin = bin;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
public int getIsEnabled() {
return isEnabled;
}
public void setIsEnabled(int isEnabled) {
this.isEnabled = isEnabled;
}
public int getIsLatest() {
return isLatest;
}
public void setIsLatest(int isLatest) {
this.isLatest = isLatest;
}
public int getRevId() {
return revId;
}
public void setRevId(int revId) {
this.revId = revId;
}
public long getRevTime() {
return revTime;
}
public void setRevTime(long revTime) {
this.revTime = revTime;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}