在 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();
}
});
}
谢谢大家愿意花时间阅读,小弟弟我在此鞠躬
>>: [Day14] 补充说明 – Cookie、Session和Token之Part1
大家好,我是Billy,身为资讯人,在对一项技术深入研究才会发现,自己不了解的更多,所以尝试以参加铁...
不知道要打什麽,直接开始 题号:739 标题:Daily Temperatures 难度:Mediu...
Over 95% of Americans know what an iPhone is, and ...
案例说明及适用场景 基本上适用於所有需要活动举办的相关场域 整合网站及线上购物模组,用於广告行销及线...
绑定事件就是可以回传在执行时的动作位置,虽然说有很多的不同事件可以使用,但是要注意,当滑鼠与键盘同时...