今天要來做簡單結合接收API以及其架構是MVP架構的實作。
需要修改的部分在於Model的部分、以及dependencies還有Manifest的網路連線權限宣告。
//Retrofit2
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation("com.squareup.okhttp3:okhttp:4.10.0")
這個權限我是宣告在application下方
<!-- 宣告連線網路-->
<uses-permission android:name="android.permission.INTERNET" />
這邊先貼上內部程式碼
private static String TAG = "Model";
private APIService apiService = SiteManager.getInstance().getAPI();
@Override
public void OnNext(Contract.Model.FinishListener OnFinished) {
GetFakeAPI(OnFinished);
}
public void GetFakeAPI(Contract.Model.FinishListener OnFinished){
Call<List<APIResponse>> call = apiService.response ();
call.enqueue (new Callback<List<APIResponse>>() {
@Override
public void onResponse (Call<List<APIResponse>> call, Response<List<APIResponse>> response) {
//顯示這是在ToString Size,因為顯示全部資料內容會佔據Logcat大半格數
Log.e (TAG, "ToString Size = "+response.body().size());
OnFinished.OnFinished(response.body().toString());
}
@Override
public void onFailure (Call<List<APIResponse>> call, Throwable t) {
Log.e (TAG, "onFailure: " );
}
});
}
interface Model{
interface FinishListener {
void OnFinished(String string);
}
void OnNext(Contract.Model.FinishListener OnFinished);
}
OnFinished(String string)
的方法,並在裡面傳入response.body().toString()
的結果,這個toString的內容如下方的APIResponse。 private int userId;
private int id;
private String title;
private String body;
@Override
public String toString() {
return "APIResponse{" +
"userId=" + userId +
", id=" + id +
", title='" + title + '\'' +
", body='" + body + '\'' +
'}';
}