zoukankan      html  css  js  c++  java
  • NoHttp封装--02 自定义请求

    bean实体类请求:

    1.bean

     1 import java.io.Serializable;
     2 import com.alibaba.fastjson.annotation.JSONField;
     3 
     4 public class UserInfo implements Serializable {
     5     private static final long serialVersionUID = 145641645L;
     6 
     7     @JSONField(name = "data")
     8     private String data;
     9     @JSONField(name = "error")
    10     private int error;
    11     @JSONField(name = "msg")
    12     private String msg;
    13 
    14     public UserInfo() {
    15         super();
    16     }
    17 
    18     public UserInfo(String data, int error, String msg) {
    19         super();
    20         this.data = data;
    21         this.error = error;
    22         this.msg = msg;
    23     }
    24     public String getData() {
    25         return data;
    26     }
    27     public void setData(String data) {
    28         this.data = data;
    29     }
    30     public int getError() {
    31         return error;
    32     }
    33     public void setError(int error) {
    34         this.error = error;
    35     }
    36 
    37     public String getMsg() {
    38         return msg;
    39     }
    40     public void setMsg(String msg) {
    41         this.msg = msg;
    42     }
    43 
    44     public boolean isSucceed() {
    45         return 1 == error;
    46     }
    47 
    48 }

    2.针对bean的request

     1 import com.alibaba.fastjson.JSON;
     2 import com.yolanda.nohttp.Headers;
     3 import com.yolanda.nohttp.JsonObjectRequest;
     4 import com.yolanda.nohttp.RequestMethod;
     5 import com.yolanda.nohttp.RestRequest;
     6 import com.yolanda.nohttp.StringRequest;
     7 import com.yolanda.nohttptest.bean.UserInfo;
     8 
     9 public class UserInfoRequest extends RestRequest<UserInfo> {
    10 
    11     public UserInfoRequest(String url, RequestMethod requestMethod) {
    12         super(url, requestMethod);
    13     }
    14     public UserInfoRequest(String url) {
    15         super(url);
    16     }
    17     @Override
    18     public String getAccept() {
    19         return JsonObjectRequest.ACCEPT;
    20     }
    21     @Override
    22     public UserInfo parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
    23         UserInfo info = null;
    24         String string = StringRequest.parseResponseString(url, responseHeaders, responseBody);
    25         try {
    26             info = JSON.parseObject(string, UserInfo.class);
    27         } catch (Exception e) {
    28             info = new UserInfo();
    29         }
    30         return info;
    31     }
    32 }

    3.具体在activity中使用:

     1 public class ObjectActivity extends Activity implements View.OnClickListener {
     2 
     3     private final int NOHTTP_LOGIN = 0x01;
     4     private final int NOHTTP_LOGOUT = 0x02;
     5 
     6     private TextView tvResult;
     7 
     8     @Override
     9     protected void onCreate(Bundle savedInstanceState) {
    10         super.onCreate(savedInstanceState);
    11         setContentView(R.layout.activity_object);
    12         findViewById(R.id.btn_login).setOnClickListener(this);
    13         findViewById(R.id.btn_logout).setOnClickListener(this);
    14         tvResult = (TextView) findViewById(R.id.tv_result);
    15     }
    16 
    17     @Override
    18     public void onClick(View v) {
    19         if (v.getId() == R.id.btn_login) {
    20             UserInfoRequest request = new UserInfoRequest(Constants.LOGIN, RequestMethod.GET);
    21             request.add("userName", "yolanda");
    22             request.add("userPwd", "123");
    23             CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGIN, true, false, true);
    24         } else {
    25             UserInfoRequest request = new UserInfoRequest(Constants.LOGOUT, RequestMethod.GET);
    26             CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGOUT, true, false, true);
    27         }
    28     }
    29 
    30     private HttpCallBack<UserInfo> callBack = new HttpCallBack<UserInfo>() {
    31 
    32         @Override
    33         public void onSucceed(int what, Response<UserInfo> response) {
    34             UserInfo info = response.get();
    35             if (what == NOHTTP_LOGIN) {// 处理登录结果
    36                 if (info.isSucceed()) {
    37                     tvResult.setText("登录接口结果:" + info.getData());
    38                 }
    39             } else if (what == NOHTTP_LOGOUT) {// 处理登出结果
    40                 if (info.isSucceed()) {
    41                     tvResult.setText("退出接口结果:" + info.getData());
    42                 }
    43             }
    44         }
    45 
    46         @Override
    47         public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
    48             tvResult.setText("请求失败");
    49         }
    50     };
    51 }

    可以解析所有JavaBean的自定义请求

     1 public class JavaBeanRequest<E> extends RestRequest<E> {
     2 
     3     private Class<E> clazz;
     4 
     5     public JavaBeanRequest(String url, RequestMethod requestMethod, Class<E> clazz) {
     6         super(url, requestMethod);
     7         this.clazz = clazz;
     8     }
     9 
    10     public JavaBeanRequest(String url, Class<E> clazz) {
    11         this(url, RequestMethod.GET, clazz);
    12     }
    13 
    14     @Override
    15     public E parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
    16         String result = StringRequest.parseResponseString(url, responseHeaders, responseBody);
    17         try {
    18             return JSON.parseObject(result, clazz);
    19         } catch (Exception e) {
    20             E instance = null;
    21             try {
    22                 // 但是前提是传进来的JavaBean必须提供了默认实现
    23                 instance = clazz.newInstance();
    24             } catch (InstantiationException e1) {
    25             } catch (IllegalAccessException e1) {
    26             }
    27             return instance;
    28         }
    29     }
    30 
    31     @Override
    32     public String getAccept() {
    33         return JsonObjectRequest.ACCEPT;
    34     }
    35 
    36 }

    activity

    Request<ServerBean> request = new JavaBeanRequest<ServerBean>(url, ServerBean.class);
    CallServer.getInstance().add(this, request, callBack, 0, true, false, true);
  • 相关阅读:
    自定义 alert 弹窗
    js控制div内的滚动条的位置
    vue 的 起手式
    d3.js封装文本实现自动换行和旋转平移等功能
    redux
    mui 本地打包
    vue-router 运行机制 及 底层原理
    替代 Navigator 组件
    react-native 创建 ios 项目
    三元运算符
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/9029233.html
Copyright © 2011-2022 走看看