美文网首页
与Android网络请求相爱相杀

与Android网络请求相爱相杀

作者: 葭葭葭葭葭 | 来源:发表于2018-05-06 18:23 被阅读0次

    网络请求

    补充:

    image

    以写一个“登录”为例

    https://github.com/maoqiu123/saiyou

    image

    前提小概念

    JSON--数据传输格式

    • 可以理解为String类型,因为需要在APIResponce中注明
    • 完整的JSON包括三个部分(如图所示)
      • code
      • msg
      • date
    image

    Postman的一把爽体验(一不小心把后端搞崩了.....羞涩)

    • GET
      • 网址的后面还需要加上“?+相关信息”
    image image
    • Post
      • 上传的item必须是JSON中有的,不然造成空指针现象,导致崩盘
    image image

    APIService.java

    image
    public interface APIService {
    
        /**
         * 登录
         */
        @POST("saiyou/public/index.php/login")
        Call<APIResponse> login(@Body LoginRequest loginRequest);
    
    
    }
    
    
    • @POST 括号内为对应网址的局部
    • @Body 后面跟着Java类的引用,因为后面的LoginRequest是一个新的类
    • call
      • 该方法将请求发送到webserver并返回响应
      • APIResponse 见下下一个标题 是一个独立的Activity
      • login 这个属于网络请求,在LoginActivity.java中的processLogin函数会用到

    LoginRequest.java

    • 相当于为Body建立一个框架

    • 设置清晰每一个item 的get 和set方法

    • 这个 get 和 set方法是自己写的,不是拓展自己来的

    • 在 LoginActivity.java文件中就会用到set,用的时候直接像这样

      • 用的时候直接像这样

      LoginRequest request = new LoginRequest();//先实例化一个对象
      request.setIdentifier('defhewkdhkeh"');

    image
    public class LoginRequest extends BaseModel {
        
        private String phone;
        private String password;
    
        public LoginRequest() {
    
        }
    
        public String getIdenttifier(){
            return phone;
        }
    
        public void serIdentifier(String phone){
            this.phone=phone;
        }
    
        public String getPassword(){
            return password;
        }
        
        public void setPassword(String password){
            this.password=password;
        }
        
    }
    
    

    APIResponse.java

    • 数据传输格式JSON中,三大重要组成
      • msg
      • code
      • date
    
    public class APIResponse<T> extends BaseModel {
        
        private int code = -2;
        private T data;
        private String msg="";
    
        public String getMsg(){
            return msg;
        }
    
        public void setMsg(String msg){
            this.msg=msg;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    }
    
    

    【注意:】由于date 的内容很多很杂,所以我们传进去的是一个范形T

    image

    有 { } 的类型--不需要带 ? 和 {...}

    image image image

    Query获取信息的方法和途径

    image

    T范式和 多形式响应获取其一Token的方法

    1.我们需要缓存的仅仅是响应中的一部分的话,那就需要专门写一个类似model的Java文件,然后从里面获得所需要的token

    image
    • TokenRequest.java
    image
    • 在XXXPresent.java文件中需要进行改动(retrofit里面的内容),就是改如果数据成功时候 进行数据缓存的方法
    image

    T范式在Retrofitservice.java中写,然后在P层中的retrofit框架中的BaseObserver中会自动跳出

    image

    model里面的全部内容只能放后端需要的东西,多少一个都不行,有其他多余的东西,跟在model的参数后面就行

    image image

    开发中遇到的坑👇

    1.【ERROR】: on a null object reference

    image
    java.lang.NullPointerException:
     Attempt to invoke interface method 'void com.hrsoft.taskgo.mvp.presenter.account.contract.ForgetPasswordContract$Presenter.sendRequestNewInformation(com.hrsoft.taskgo.mvp.model.account.request.ForgetPasswordModel, java.lang.String)'
      on a null object reference
    

    原来

    image

    后来

    image

    然而还真是。。。。

    2.【ERROR】: on a null object reference

    知识须知-网络请求对应的

    image

    好的👌,继续问题👇

    image image image

    注意注意!

    • BaseURL需在Config里面进行更改

      • 与后端给出的github相对
      image
        /**
         * APP Server 网络请求BaseUrl
         */
        public static final String APP_SERVER_BASE_URL = "http://www.thmaoqiu.cn/";
    
    

    相关文章

      网友评论

          本文标题:与Android网络请求相爱相杀

          本文链接:https://www.haomeiwen.com/subject/mcwurftx.html