網(wǎng)絡(luò)請(qǐng)求
補(bǔ)充:

image
以寫一個(gè)“登錄”為例
https://github.com/maoqiu123/saiyou

image
前提小概念
JSON--數(shù)據(jù)傳輸格式
- 可以理解為String類型,因?yàn)樾枰贏PIResponce中注明
- 完整的JSON包括三個(gè)部分(如圖所示)
- code
- msg
- date

image
Postman的一把爽體驗(yàn)(一不小心把后端搞崩了.....羞澀)
- GET
- 網(wǎng)址的后面還需要加上“?+相關(guān)信息”

image

image
- Post
- 上傳的item必須是JSON中有的,不然造成空指針現(xiàn)象,導(dǎo)致崩盤

image

image
APIService.java

image
public interface APIService {
/**
* 登錄
*/
@POST("saiyou/public/index.php/login")
Call<APIResponse> login(@Body LoginRequest loginRequest);
}
- @POST 括號(hào)內(nèi)為對(duì)應(yīng)網(wǎng)址的局部
- @Body 后面跟著Java類的引用,因?yàn)楹竺娴腖oginRequest是一個(gè)新的類
- call
- 該方法將請(qǐng)求發(fā)送到webserver并返回響應(yīng)
- APIResponse 見下下一個(gè)標(biāo)題 是一個(gè)獨(dú)立的Activity
- login 這個(gè)屬于網(wǎng)絡(luò)請(qǐng)求,在LoginActivity.java中的processLogin函數(shù)會(huì)用到
LoginRequest.java
相當(dāng)于為Body建立一個(gè)框架
設(shè)置清晰每一個(gè)item 的get 和set方法
這個(gè) get 和 set方法是自己寫的,不是拓展自己來的
-
在 LoginActivity.java文件中就會(huì)用到set,用的時(shí)候直接像這樣
- 用的時(shí)候直接像這樣
LoginRequest request = new LoginRequest();//先實(shí)例化一個(gè)對(duì)象
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
- 數(shù)據(jù)傳輸格式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 的內(nèi)容很多很雜,所以我們傳進(jìn)去的是一個(gè)范形T

image
有 { } 的類型--不需要帶 ? 和 {...}

image

image

image
Query獲取信息的方法和途徑

image
T范式和 多形式響應(yīng)獲取其一Token的方法
1.我們需要緩存的僅僅是響應(yīng)中的一部分的話,那就需要專門寫一個(gè)類似model的Java文件,然后從里面獲得所需要的token

image
- TokenRequest.java

image
- 在XXXPresent.java文件中需要進(jìn)行改動(dòng)(retrofit里面的內(nèi)容),就是改如果數(shù)據(jù)成功時(shí)候 進(jìn)行數(shù)據(jù)緩存的方法

image
T范式在Retrofitservice.java中寫,然后在P層中的retrofit框架中的BaseObserver中會(huì)自動(dòng)跳出

image
model里面的全部內(nèi)容只能放后端需要的東西,多少一個(gè)都不行,有其他多余的東西,跟在model的參數(shù)后面就行

image

image
開發(fā)中遇到的坑??
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
知識(shí)須知-網(wǎng)絡(luò)請(qǐng)求對(duì)應(yīng)的

image
好的??,繼續(xù)問題??

image

image

image
注意注意!
-
BaseURL需在Config里面進(jìn)行更改
- 與后端給出的github相對(duì)
image
/**
* APP Server 網(wǎng)絡(luò)請(qǐng)求BaseUrl
*/
public static final String APP_SERVER_BASE_URL = "http://www.thmaoqiu.cn/";
