Android开发学习

后台返回不同Json格式的分析

2016-12-14  本文已影响284人  liuhedev

问题描述


我们在处理服务器返回的数据时候,经常碰到两种类型的返回数据,如下:

// 格式一
 {
    "response": {
      "name": "xx",
      "age": "23"
    }
  }
// 格式二
 {
    "code": "404",
    "message": "error url",
    "response": {
      "name": "xx",
      "age": "12"
    }

其中,

分析


格式一(1)虽然使用了HTTP标准协议,但是涉及到具体的业务错误,比如用户名密码错误、请求参数错误等问题,我们就无法确认到底是网络的原因、服务器的原因或者用户请求参数的原因;所以客户端关心的除了网络错误,更多的是业务错误,服务器返回的错误必须一对一的,不能一个错误码代表多种错误场景。

例如,下面登录场景:

protected HttpCallBack mHttpCallBack = new HttpCallBack() {
        @Override
        public void onFailure(Exception e) {
            hideLoadingProgress();
            if (null != e) {
                CommonMethod.showToast("请检测网络设置");
            } else {
                CommonMethod.showToast("登录失败");
            }
        }

        @Override
        public void onResponse(int code, String resultStr) throws IOException {
            hideLoadingProgress();
            if (code == 200 && !TextUtils.isEmpty(resultStr)) {
                try {
                    int flag = Global.parsePassPort(resultStr);
                    if (flag == 1) {
                        Global.userInfo.setPwd(mPwd);
                        finish();
                        RootActivity.launch(LoginActivity.this);
                        return;
                    } else if (flag == -1) {
                        CommonMethod.showToast("登录失败 手机时间设置错误");
                        return;
                    } else if (flag == 0) {
                     //当只是密码输入错误时候,返回的状态码依然是200,但是resultStr解析的flog,却是0。
                        CommonMethod.showToast("登录失败 账号或密码错误");
                        return;
                    }
                } catch (Exception e){
                    e.printStackTrace();
                    CommonMethod.showToast("登录失败");
                }
                CommonMethod.showToast("登录失败");
            }
        }
    };

/**
服务器返回数据类型:
{
  "result_status": 1,
  "result_desc": "成功",
  "columns": [
    {
      "column_name": "客户编号",
      "column_key": "id",
      "column_type": 0,
      "default_value": ""
    },
    {
      "column_name": "客户姓名",
      "column_key": "client_name",
      "column_type": 1,
      "default_value": ""
    },
    {
      "column_name": "公司名称",
      "column_key": "client_company",
      "column_type": "3",
      "default_value": ""
    }
  ],
  "columns_ver": "1"
}
*/

番外


在格式一中,我考虑有一种场景是, 按照标准的HTTP协议,我们说401是未授权(登录过期),有没有这样情况,由于网络错误,或者后台处理有问题,也会导致报401错误?现在想想,其实没有必要考虑这个问题,如果按照格式一,后台返回401,指定是出了问题,如果前端在保证传参正确的情况,也只能和后台进行联调了.

上一篇 下一篇

猜你喜欢

热点阅读