XHttp2
XHttp2 copied to clipboard
使用中问题和解决方法记录
自定义Result
可能遇到的问题:
- ApiResult.class.isAssignableFrom(cls)err!! 原因类被混淆了 需要添加 -keep class 路径
- 返回code为不是int类型; 解决当然是 新建一个枚举映射类啊HttpResponseCode
public class CustomApiResult<T> extends ApiResult<T> {
private String errorCode;
private String errorMessage;
private String requestId;
private Boolean success;
private String timestamp;
//省略get set....
@Override
public int getCode() {
return HttpResponseCode.transServerCode(errorCode);
}
@Override
public String getMsg() {
return errorMessage;
}
@Override
public boolean isSuccess() {
return success;
}
@Override
public CustomApiResult setData(T data) {
super.setData(data);
return this;
}
@Override
public T getData() {
return super.getData();
}
@Override
public String toString() {
return "CustomApiResult{" +
"code='" + super.getCode() + '\'' +
", message='" + super.getMsg() + '\'' +
", result=" + super.getData() +
'}';
}
}
public enum HttpResponseCode {
//成功code
SUCCESS_CODE("0000", 200),
//未绑定店铺
NO_SHOP_ERROR_CODE("A0001", 201),
//需要验证码
NEED_LOGIN_CODE("A0211", 202);
HttpResponseCode(String serverCode, int pdaCode) {
this.serverCode = serverCode;
this.pdaCode = pdaCode;
}
private String serverCode;
private int pdaCode;
public String getServerCode() {
return serverCode;
}
public int getPdaCode() {
return pdaCode;
}
public static int transServerCode(String serverCode) {
for (HttpResponseCode code : HttpResponseCode.values()) {
if (code.getServerCode().equals(serverCode)) {
return code.getPdaCode();
}
}
return 0;
}
}
重要事情说三遍
别忘了 添加 : -keep class CustomApiResult 路径
别忘了 添加 : -keep class CustomApiResult 路径
别忘了 添加 : -keep class CustomApiResult 路径
返回 的Data 不是一个JsonObject是String Long 等类型
{
"errorCode": "00000",
"errorMessage": null,
"data": "rsapublckkey",
"requestId": "xfdf22121s",
"success": true
}
//此处以String为例子
XHttp.get("/web/auth/getEncryptKey")
.execute(new CallBackProxy<CustomApiResult<String>, String>(new SimpleCallBack<String>() {
@Override
public void onSuccess(String responseString) throws Throwable {
//这里的responseString 为 上面的整个后台返回报文
ApiResponse response = GSONUtil.parseStringData(responseString, ApiResponse.class);
//然后 类型自己转 判空啥的 注意
String a = response.getData(),toSting();
}
}){}); //千万注意,这里的{}一定不能去掉,否则解析错误
//lombok插件
@Data
public class ApiResponse implements Serializable {
private String errorCode;
private String errorMessage;
private String requestId;
private Boolean success;
private Object data;
}
动态添加参数的拦截器遇到的坑
添加token 时当token 包含特殊字符 如 空格 等 会转义导致后台校验token失败 解决:不使用拦截器添加;在XHttp.get("") 或者XHttp.post("")是添加Header; 在自己项目里 对 XHttp.get("") ;post等请求 再封装一层,在这里添加Header 等其他操作
Cookie
XHttp.getInstance().setCookieStore(CookieManager.getInstance(application));
反正我这一行代码就解决 了;