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

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

IBalanceService.java

public Interface IBalanceService{ @GET("users/{username}") void getUser(@Path("username") String username, Callback 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 call = apiService.getUser(username); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { User user = response.body(); // update Activity/Fragment from here } @Override public void onFailure(Call 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?

附加信息:
min 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 call = apiService.getUser(username); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { User user = response.body(); callback.onResponse(user); } @Override public void onFailure(Call 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 call, Response 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 } }