iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Mobile Development

Android studio 30天初學筆記系列 第 17

[Android Studio 30天挑戰] Day17 - 介紹Retrofit

  • 分享至 

  • xImage
  •  

今天要介紹的是Retrofit,Retrofit是專為API連線來取得資料,而Retrofit與API連線的效率非常高,最特別的是其規範的REST框架讓程式高度解耦,好寫易維護。/images/emoticon/emoticon24.gif

依賴

一樣的請到build.grade(Module: app)的dependencies加入依賴。

dependencies{
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
}

第二行是用Google的Gson套件作為資料處理的converter,Retrofit都整合好了所以我們之後只要一行程式碼就能用Gson處理資料。

網路權限

在AndroidManifet加入網路權限:

<uses-permission android:name="android.permission.INTERNET" />

建立資料

Retrofit會自動將連線取得的資料轉成物件便於做後續處理,而這是我所使用的json
接下來我們看到裡面種共有(id,title,body,userId)這四種資料,我們就建一個物件如下,注意欄位名稱要跟API裡的一致。

public class Post {
        private String id;
        private String title;
        private String body;
        private String userId;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}

小方法

我們可以不用打那麼多,你只要先設定完變數後,案右鍵選Generate這一個,進入後再按Getter and Setter就ok了。
https://ithelp.ithome.com.tw/upload/images/20220723/20150369K8pxNN6xia.pnghttps://ithelp.ithome.com.tw/upload/images/20220723/2015036968knadrALN.png

建立Interface

Interface就是各個連線的接口,每個連線是用GET或POST及其路徑、參數都寫在這裡。

public interface MyAPI {
    @GET("posts/1")    // 設置一個GET連線,路徑為posts/1
    Call<Post> getpost();    // 取得的回傳資料用Post物件接收,連線名稱取為getpost
}

建立Retrofit

建立連線的基底。

public class ApiClient {
    private ApiService apiService;
    public ApiService getApiService() {
        // baseUrl: 定義 API 網域網址,即是我們剛剛拆出來的前綴共用的部分
        // ddConverterFactory: 定義要將資料轉成什麼格式
        retrofit2.Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        apiService = retrofit.create(ApiService.class);
        return apiService;
    }
}

MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //new出實例
        ApiClient apiClient=new ApiClient();
        //執行連線服務,透過 Callback 來等待回傳成功或失敗的資料
        apiClient.getApiService().getpost().enqueue(new Callback<Post>() {
            //回傳成功
            @Override
            public void onResponse(Call<Post> call, Response<Post> response) {
                //列印回傳資料
                Log.e("note",response.body().getId());
                Log.e("note",response.body().getUserId());
                Log.e("note",response.body().getTitle());
                Log.e("note",response.body().getBody());
            }
            //回傳失敗
            @Override
            public void onFailure(Call<Post> call, Throwable t) {
                //列印錯誤訊息
                Log.d("note", "response: " + t.toString());
            }
        });
    }
}

最後在下方的Logcat漸能看到回傳的資料了。
https://ithelp.ithome.com.tw/upload/images/20220723/20150369zDCBr1vMoh.png


上一篇
[Android Studio 30天挑戰] Day16 - 介紹Activity生命週期
下一篇
[Android Studio 30天挑戰] Day018- 介紹okhttp
系列文
Android studio 30天初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言