[英]How can I update Activity/Fragment UI from Retrofit onResponse()?
I want to use Retrofit 2.1.0 for my next Android project. 我要在我的下一个Android项目中使用Retrofit 2.1.0。 I would like to use Design Pattern and therefore create separate classes for every REST call ie
我想使用设计模式,因此为每个REST调用创建单独的类,即
IBalanceService.java IBalanceService.java
public Interface IBalanceService{
@GET("users/{username}")
void getUser(@Path("username") String username, Callback<User> cb);
}
BalanceRestClient.java 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 BalanceActivity.java
public BalanceActivity extends Activity{
// BalanceRestClient will update some UI elements
}
How can I update UI in my Activity/fragment from onResponse()? 如何通过onResponse()更新活动/片段中的UI?
Additional Info:
附加信息:
min SDK : 19最小SDK:19
target SDK : 23目标SDK:23
Retrofit 2.1.0 with OkHttp and gson使用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
}
});
}
}
Make an interface like this on: 制作一个像这样的界面:
public interface BalanceListener {
void onUserAvailable(User user);
}
In your BalanceRestClient have an instance of it. 在您的BalanceRestClient中有一个实例。 And in onResponse :
在onResponse中 :
@Override
public void onResponse(Call<User> call, Response<User> response) {
User user = response.body();
listener.onUserAvailable(user);
}
Make your Activity implement BalanceListner : 使您的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.