我正在尝试使用Retrofit 2构建一个Rest客户端。这是第一次使用此库。
我见过的大多数示例通常在Android活动或视图中使用回调函数。
http://www.vogella.com/tutorials/Retrofit/article.html
https://github.com/MeetMe/TwitchTvClient/tree/master/src/com/wdonahue/twitchtvclient
我想知道,在下面的代码中,是否可以返回Appver类型的对象而不是void?
谢谢!
public void GetAppver()
{
Call<Appver> call = endPoint.GetAppver();
call.enqueue(new Callback<Appver>()
{
@Override
public void onResponse(Call<Appver> call, Response<Appver> response)
{
if (response.isSuccessful())
{
Appver appver = response.body();
}
}
@Override
public void onFailure(Call<Appver> call, Throwable t) { }
});
}
答案 0 :(得分:1)
我想你想拥有Appver
,因为你需要使用这个对象来设置UI,例如在 RecyclerView 中,在这种情况下我想你不能避免不使用无效,因为您正在扩展库。但是肯定可以使用Dagger2或Singleton,尽管有一些contraindications来维护Appver的实例,以便您可以在Adapter中使用它
在现实生活中很少以这种方式使用Retrofit2,通常用RXJava2或Google Architecture组件实现它作为ViewModel,LiveData和LifeCycle
答案 1 :(得分:0)
您可以同步调用Retrofit服务方法。
public AppVer GetAppVer() {
Call<AppVer> call = endPoint.GetAppver();
Response<AppVer> response;
try {
response = call.execute();
} catch (IOException e) {
// Handle network communication errors here
}
if (!response.isSuccessful()) {
// Handle REST service errors here
}
return response.body();
}
但是,如您所知,您无法在Android主线程上进行网络通信。你必须把呼叫包裹在例如线程,异步传输或服务。
请查看以下链接,了解如何构建应用。