如何解决致电或进行翻新改造?
我想知道“呼叫”和“响应”之间的区别吗?那是什么时候在翻新中使用 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>
这两个功能对我来说都很好,都具有不同的实现方式,但用途几乎相同。
1。哪种响应类型适合最佳实践?
2。何时使用响应和呼叫?
解决方法
1。哪种响应类型适合最佳实践?
我认为这取决于您的用例。通过使用retrofit2.Response<T>
,我们可以访问errorBody()
(失败响应的原始响应主体。),code()
(HTTP状态码)或headers()
(HTTP标头)。
2。何时使用响应和呼叫?
- 响应:如上所述
- 通话:不需要,因为回调类型(例如
Call
)已由suspend function
代替。第二种方法可能更简单:
@GET("/albums/{id}")
suspend fun functionTwo(@Path(value = "id") albumsId:Int): Albums
,
当我们愿意使用其排队回调函数时,“呼叫”很有用。
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) {
}
});
当我们在项目中使用Coroutines或RxJava(这是最佳的专业实践)来提供异步执行时,我们不需要排队回调。我们可以只使用Response。
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。