与Android网络请求相爱相杀

网络请求

补充:

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 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 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网络请求相爱相杀)