Asi*_*air 4 android kotlin android-studio retrofit2 kotlin-coroutines
我想知道 Call 和 Response 之间的区别?在 Retrofit 中何时使用Call和何时使用Response?
@GET("/albums/{id}")
suspend fun functionOne(@Path(value = "id") albumsId:Int):Response<Albums>
@GET("/albums/{id}")
suspend fun functionTwo(@Path(value = "id") albumsId:Int):Call<Albums>
Run Code Online (Sandbox Code Playgroud)
这两个功能对我来说都很好,都有不同的实现,但目的几乎相同。
1. 什么样的响应类型有利于最佳实践?
2. 何时使用响应和呼叫?
小智 8
当我们愿意使用它的入队回调函数时,“调用”很有用。
call.enqueue(new Callback<Info>() {
@Override
public void onResponse(Call<Info> call, Response<Info> response) {
Info info = response.body();
if (info != null && info.getRestResponse() != null) {
results = (ArrayList<Result>) info.getRestResponse().getResult();
viewData();
}
}
@Override
public void onFailure(Call<Info> call, Throwable t) {
}
});
Run Code Online (Sandbox Code Playgroud)
当我们在项目中使用 Coroutines 或 RxJava(这是最好的专业实践)提供异步执行时,我们不需要入队回调。我们可以只使用响应。
suspend fun getMoviesFromAPI(): List<Movie> {
lateinit var movieList: List<Movie>
try {
val response = movieRemoteDatasource.getMovies()
val body = response.body()
if(body!=null){
movieList = body.movies
}
} catch (exception: Exception) {
Log.i("MyTag", exception.message.toString())
}
return movieList
}
Run Code Online (Sandbox Code Playgroud)
我认为这取决于您的用例。通过使用retrofit2.Response<T>,我们可以访问errorBody()(未成功响应的原始响应正文。)、code()(HTTP 状态代码。) 或headers()(HTTP 标头)。
Call)被替换为suspend function。第二种方法可能更简单,例如:@GET("/albums/{id}")
suspend fun functionTwo(@Path(value = "id") albumsId:Int): Albums
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2251 次 |
| 最近记录: |