[Lesson14] Retrofit

在 gradle (Module) 层级的 dependencies 中内加入:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation "com.squareup.retrofit2:converter-gson:2.9.0"

在AndroidManifet加入网路权限:

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

Interface连线接口
将所有连线的请求方法(GET、POST)及其路径、参数统一管理

public interface MyAPI {
    @GET("todos/1")    // 设置一个GET连线,路径为todos/1
    Call<Todos> getTodos();    // 取得的回传资料用Todos物件接收,连线名称取为getTodos

    @GET("todos/{id}") // 用{}表示路径参数,@Path会将参数带入至该位置
    Call<Todos> getTodosById(@Path("id") int id);

    @POST("todos") // 用@Body表示要传送Body资料
    Call<Todos> postTodos(@Body Todos todos);
}

Todos资料Model
根据 json 的回应资料,设计出 Todos 资料类别,注意栏位名称要跟API里的一致

public class Todos {
    private int userId;
    private int id;
    private String title;
    private boolean completed;

    public int getUserId() {
        return userId;
    }

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

    public int getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

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

    public boolean isCompleted() {
        return completed;
    }

    public void setCompleted(boolean completed) {
        this.completed = completed;
    }
}

RetrofitManager连线基底
设置连线网站(https://jsonplaceholder.typicode.com/) 和 converter

public class RetrofitManager {

    // 以Singleton模式建立
    private static RetrofitManager mInstance = new RetrofitManager();

    private MyAPI myAPI;

    private RetrofitManager() {

        // 设置baseUrl即要连的网站,addConverterFactory用Gson作为资料处理Converter
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        myAPI = retrofit.create(MyAPI.class);
    }

    public static RetrofitManager getInstance() {
        return mInstance;
    }

    public MyAPI getAPI() {
        return myAPI;
    }
}

GET

private void retrofitGet() {
        // 1. 宣告MyAPI
        MyAPI myAPI;
        
        // 2. 透过RetrofitManager取得连线基底
        myAPI = RetrofitManager.getInstance().getAPI();

        // 3. 建立连线的Call,此处设置call为myAPI中的getTodos()连线
        Call<Todos> call = myAPI.getTodos();
        
        // 若要设置call为myAPI中的getTodosById()连线,更改call的method并将参数传入就行
        // Call<Todos> call = myAPI.getTodosById(2);

        // 4. 执行call
        call.enqueue(new Callback<Todos>() {
            @Override
            public void onResponse(Call<Todos> call, Response<Todos> response) {
                // 连线成功
                // 回传的资料已转成Todos物件,可直接用get方法取得特定栏位
                String title = response.body().getTitle();
                Log.d("get", title);
            }

            @Override
            public void onFailure(Call<Todos> call, Throwable t) {
                // 连线失败
                t.printStackTrace();
            }
        });
}

POST

private void retrofitPost() {
        MyAPI myAPI;

        myAPI = RetrofitManager.getInstance().getAPI();

        // 建立要POST的物件
        Todos todos = new Todos(1,1,"delectus aut autem",false);
        
        // 将物件作为postTodos的参数
        Call<Todos> call = myAPI.postTodos(todos);

        call.enqueue(new Callback<Todos>() {
            @Override
            public void onResponse(Call<Todos> call, Response<Todos> response) {
                // 连线成功
                String title = response.body().getTitle();
                Log.d("post", title);
            }

            @Override
            public void onFailure(Call<Todos> call, Throwable t) {
                // 连线失败
                t.printStackTrace();
            }
        });
}

谢谢大家愿意花时间阅读,小弟弟我在此鞠躬/images/emoticon/emoticon41.gif


<<:  资讯安全

>>:  [Day14] 补充说明 – Cookie、Session和Token之Part1

[DAY 1] 前言

大家好,我是Billy,身为资讯人,在对一项技术深入研究才会发现,自己不了解的更多,所以尝试以参加铁...

找LeetCode上简单的题目来撑过30天啦(DAY21)

不知道要打什麽,直接开始 题号:739 标题:Daily Temperatures 难度:Mediu...

Best iPhone Apps - To Create Contact Groups You Will Need an Additional App

Over 95% of Americans know what an iPhone is, and ...

Day 29 : 案例分享(9) 活动 - 线上报名、线上缴费及线上会议

案例说明及适用场景 基本上适用於所有需要活动举办的相关场域 整合网站及线上购物模组,用於广告行销及线...

Day16 用python写UI-聊聊Binding events

绑定事件就是可以回传在执行时的动作位置,虽然说有很多的不同事件可以使用,但是要注意,当滑鼠与键盘同时...