暂不知怎么开头,直接上实践了,慢慢补充
1.一个Retrofit的小案例Demo。
首先得在build.gradle中添加Retrofit添加依赖,例如:
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
简单的例子:三步骤。
1. 新建Service文件
public interface SimpleDemoApiService {
@GET("/jerechen/article/details/83722574")
Call<ResponseBody> getJereChenBlog();
}
2. 新建wrapper文件
public class SimpleDemoApiWrapper {
private static Retrofit retrofit;
private static final String BASE_URL = "https://blog.youkuaiyun.com";
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
// customize retrofit network timeouts, default timeouts is ten seconds.
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.build();
}
return retrofit;
}
}
3. 直接在Activity中调用
public class SimpleDemo extends AppCompatActivity {
private static final String TAG = "SimpleDemo";
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_demo);
Button callApiBtn = findViewById(R.id.simple_demo_call_api_btn);
mTextView = findViewById(R.id.simple_demo_tv);
callApiBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getBlog();
}
});
}
private void getBlog() {
SimpleDemoApiService simpleDemoApiService = SimpleDemoApiWrapper.getRetrofitInstance().create(SimpleDemoApiService.class);
simpleDemoApiService.getJereChenBlog().enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.d(TAG, "onResponse: ");
try {
mTextView.setText(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.d(TAG, "onFailure: ");
}
});
}
}
2. 自定义回调函数
将 Response 解析成 User。
/**
* @author jere
*/
public class User {
@SerializedName("name")
@Expose
private String name;
@SerializedName("age")
@Expose
private Integer age;
@SerializedName("height")
@Expose
private Integer height;
@SerializedName("weight")
@Expose
private Integer weight;
@SerializedName("address")
@Expose
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
public Integer getWeight() {
return weight;
}
public void setWeight(Integer weight) {
this.weight = weight;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
回调函数
public abstract class AbstractGetUserInfoCallback implements Callback<ResponseBody> {
abstract void getUserInfoSuccess(User user);
abstract void getUserInfoFailed(String failedMessage);
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.code() == 200) {
try {
String responseBodyString = response.body().string();
Gson gson = new Gson();
User user = gson.fromJson(responseBodyString, User.class);
getUserInfoSuccess(user);
} catch (IOException e) {
e.printStackTrace();
getUserInfoFailed("parse response body failed!");
}
} else {
getUserInfoFailed("error responseCode: " + response.code());
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
getUserInfoFailed(t.getMessage());
}
}