如何使用Retrofit 2

时间:2018-05-29 19:27:35

标签: java android retrofit2

我正在尝试使用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) { }
    });
}

2 个答案:

答案 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主线程上进行网络通信。你必须把呼叫包裹在例如线程,异步传输或服务。

请查看以下链接,了解如何构建应用。