我最近研究过Retrofit.我只是在我的项目中实施.我有近20个api.我已经宣布了所有的方法.
public interface RF_Calls {
@POST(AppConstants.API_EVENTS_BYSTUDENTS)
void getEvents(@Body JsonObject events);
@POST(AppConstants.API_EXAMS_BYSTUDENTS)
void getExamsbyStudents(@Body JsonObject exams);
}
Run Code Online (Sandbox Code Playgroud)
我只想要两种方法的共同进度条,一旦获得成功和失败就必须解雇
你想要做的首先是使接口调用正确,它应该是(从改造2开始):
Call<object> getEvents(@Body JsonObject events)
**
**请注意,object
type参数应替换为您希望从服务返回的模型.如果您不关心响应,可以将其作为我认为的对象.
这将允许进行异步调用,您可以给它一个回调:
//This should be in your activity or fragment
final RF_Calls service = //Create your service;
Call c = service.getEvents(json);
[Your progress view].show();
c.enqueue(new Callback<object>{
@Override
public void onResponse(Response<object>, Retrofit retrofit){
[Your progress view].hide();
}
@Override
public void onFailure(Throwable t){
[Your progress view].hide();
}
});
Run Code Online (Sandbox Code Playgroud)
进度屏幕是UI关注点,因此应该在活动或片段中处理,所述活动或片段将利用服务来获取所需的数据.
在回应评论时,一个包含调用的简单解决方案:
//Defines an interface that we can call into
public interface Act<T> {
void execute(T data);
}
//Makes a call to the service and handles the UI manipulation for you
public static <T> void makeServiceCallWithProgress(Call c, final Act<T> success, final Act<Throwable> failure, final ProgressBar progressBar) {
progressBar.setVisibility(View.VISIBLE);
c.enqueue(new Callback<T>() {
@Override
public void onResponse(Response<T> response, Retrofit retrofit) {
progressBar.setVisibility(View.GONE);
success.execute(response.body());
}
@Override
public void onFailure(Throwable t) {
progressBar.setVisibility(View.GONE);
failure.execute(t);
}
});
}
Run Code Online (Sandbox Code Playgroud)
以下是一个示例用法:
makeServiceCallWithProgress(service.getEvents(json),
new Act<MyResponseModel>() {
@Override
public void execute(MyResponseModel data) {
//TODO: Do something!
}
},
new Act<Throwable>() {
@Override
public void execute(Throwable data) {
//TODO: Do something!
}
},
progressBar);
Run Code Online (Sandbox Code Playgroud)
它不是最漂亮的,但是再一次,Java Android使用的版本并没有给我们太多的功能成为一等公民.
归档时间: |
|
查看次数: |
2026 次 |
最近记录: |