簡體   English   中英

如何從Retrofit onResponse()更新活動/片段UI?

[英]How can I update Activity/Fragment UI from Retrofit onResponse()?

我要在我的下一個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()更新活動/片段中的UI?

附加信息:
最小SDK:19
目標SDK:23
使用OkHttp和gson改造2.1.0

 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. 創建一個自定義回調,它將使您的響應返回給UI。
  3. 在要使用它的地方調用BalanceRestClient.getInstance.getRequest(params ..)。

制作一個像這樣的界面:

public interface BalanceListener {

    void onUserAvailable(User user);

}

在您的BalanceRestClient中有一個實例。 onResponse中

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

      User user = response.body();  

      listener.onUserAvailable(user);

  }

使您的Activity實施BalanceListner

 public class BalanceActivity extends Activity implements BalanceListener {
                ......

        @Override
        public void onUserAvailable(User user) {
            // update user views here
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM