java - 如何从 Retrofit onResponse() 更新 Activity/Fragment UI?

标签 java android rest retrofit2

我想在我的下一个 Android 项目中使用 Retrofit 2.1.0。我想使用设计模式,因此为每个 REST 调用创建单独的类,即

IBalanceService.java

public Interface IBalanceService{
  @GET("users/{username}")
  void getUser(@Path("username") String username, Callback<User> cb);
}  

BalanceRestClient.java

public class BalanceRestClient{  

  String username = "Makarov";  

  Retrofit retrofit = new Retrofit.Builder()
                               .baseUrl("http://hovermind.com")
                               .addConverterFactory(GsonConverterFactory.create())
                               .addCallAdapterFactory(rxAdapter)
                               .build();  

  IBalanceService bs = retrofit.create(IBalanceService.class);


  Call<User> call = apiService.getUser(username);
  call.enqueue(new Callback<User>() {  

      @Override
      public void onResponse(Call<User> call, Response<User> response) {

          User user = response.body();  

          // update Activity/Fragment from here  

      }

      @Override
      public void onFailure(Call<User> call, Throwable t) {
        // Log error here since request failed
      }  

   });
}

BalanceActivity.java

public BalanceActivity extends Activity{

   // BalanceRestClient will update some UI elements 
}  

如何通过 onResponse() 更新 Activity/fragment 中的 UI?

Additional Info:
min SDK : 19
target SDK : 23
Retrofit 2.1.0 with OkHttp and gson

最佳答案

 public class BalanceRestClient {

            private static BalanceRestClient instance;
            private IBalanceService request;

            private BalanceRestClient() {
                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("http://hovermind.com")
                        .addConverterFactory(GsonConverterFactory.create())
                        .addCallAdapterFactory(rxAdapter)
                        .build();

                request = retrofit.create(IBalanceService.class);
            }

            public static synchronized BalanceRestClient getInstance() {
                if (instance == null)
                    instance = new BalanceRestClient();

                return instance;
            }

            public void getRequest(String userName, YourCustomeCallback callback) {

                Call<User> call = apiService.getUser(username);
                call.enqueue(new Callback<User>() {

                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {

                        User user = response.body();

                        callback.onResponse(user);

                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable t) {
                        // Log error here since request failed
                    }

                });
            }
        }
  1. 创建一个单例类。它只初始化一次请求。
  2. 创建自定义回调,将您的响应返回给界面。
  3. 在您想要使用的地方调用 BalanceRestClient.getInstance.getRequest(params..)。

关于java - 如何从 Retrofit onResponse() 更新 Activity/Fragment UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160019/

相关文章:

java - Java 中搜索和排序算法的高效实现

java - 通过反射获取getter的fieldname

java - 如何修复错误 : JAVA_HOME is set to an invalid directory (Flutter android licenses)

android - 实现夜间模式功能的正确方法

java - 使用 Apache Tomcat 在 Eclipse 中运行 RESTful Web 服务

java - 如何从 ResultSet 类型的对象中获取一个 int 值?

java - LWUIT:在后台线程中加载图像

android - 公开不那么 secret 的 oauth key 有哪些风险?有什么解决方法吗?

java - 在服务器之间共享 REST token

java - 带有 Date 类型的 spring-cloud-feign Client 和 @RequestParam