iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Mobile Development

Android Studio 30天學習系列 第 27

Android Studio 30天學習-DAY27_API_in_MVP基本建立學習

  • 分享至 

  • xImage
  •  

MVP結合API

今天要來做簡單結合接收API以及其架構是MVP架構的實作。

結合前面所的MVP架構進行修改

需要修改的部分在於Model的部分、以及dependencies還有Manifest的網路連線權限宣告。

dependencies

    //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")

AndroidManifest

這個權限我是宣告在application下方

    <!--    宣告連線網路-->
    <uses-permission android:name="android.permission.INTERNET" />

Model的修改

這邊先貼上內部程式碼

    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: " );
            }
        });
    }
  • 這邊我建立一個副程式來接收到FakeAPI的結果,並以傳入的方式撰寫。
  • 傳入的值是在Model的FinishedListener interface。
  • 而這個FinishedListener的interface內有一個方法是傳入String變數的。
    •   interface Model{
            interface FinishListener {
                void OnFinished(String string);
            }
      
            void OnNext(Contract.Model.FinishListener OnFinished);
        }
      
  • 接著我在接收成功的結果顯示中寫上這個OnFinished(String string)的方法,並在裡面傳入response.body().toString()的結果,這個toString的內容如下方的APIResponse。
  • 以下有幾個是前幾天所做的Retrofit所轉寫的程式碼,這邊就不再貼程式碼上來了。
    • APIService
    • SiteManager
    • Contract(interface格式)

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 + '\'' +
                '}';
    }

結果顯示

  • 全畫面
  • 部分資料截圖(第一筆資料在Android Studio顯示)
    這邊因為沒有使用滑動效果所以無法看到下面的其他資訊,這邊先以Logcat來看是否真的有抓到最後一筆資料。
  • 第100筆假資料內容以及放大圖。
    • 放大圖:可以看到是第100筆資料
  • logcat截圖
    這邊使用Size來顯示結果是因為全部資料內容都顯示出來的話會佔據很多Logcat版面,不好觀看結果。

這邊就是今天的API結合MVP架構的學習與實作


上一篇
Android Studio 30天學習-DAY26_MVP架構與練習
下一篇
Android Studio 30天學習-DAY28_SharedPerferences基本建立學習
系列文
Android Studio 30天學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言