Android 改装+;奥托+;AA,如何做简单的get请求?

Android 改装+;奥托+;AA,如何做简单的get请求?,android,retrofit,android-annotations,otto,Android,Retrofit,Android Annotations,Otto,我正在对样板文件使用Android注释,并对Api调用进行改装,在通过改装进行post请求时,我发现了一些问题: 当我使用改型调用异步调用“GET”请求时,我需要在调用完成后执行一些操作,并且我不能使用“onResponse()”,因为我使用的是“Bean”注释 这没有道理,对吧?看看代码 示例Bean类: @EBean public class someClass{ /* Suppose api is getting RestClient reference from Retrofit

我正在对样板文件使用
Android注释
,并对Api调用进行改装,在通过改装进行post请求时,我发现了一些问题:

当我使用改型调用异步调用“GET”请求时,我需要在调用完成后执行一些操作,并且我不能使用“onResponse()”,因为我使用的是“Bean”注释

这没有道理,对吧?看看代码

示例Bean类:

@EBean
public class someClass{

   /* Suppose api is getting RestClient reference from Retrofit*/
   @AfterInject
   void doSomeWork(){ api = SampleAPI.Factory.getIstance(mcontext);}

   /**
     * Get list of all courses from database
     * @Return List<CourseInfo> courseInfo objects
     */
    public List<CourseInfo> GetCoursesList() {
        final List<CourseInfo> cor = new ArrayList<>();
        api.getAllCourses(user.getApikey()).enqueue(new Callback<List<CourseInfo>>() {
            @Override
            public void onResponse(retrofit2.Call<List<CourseInfo>> call, Response<List<CourseInfo>> response) {
                Collections.copy(cor,response.body());
            }

            @Override
            public void onFailure(retrofit2.Call<List<CourseInfo>> call, Throwable t) {
                UiHelpers.showToast(mcontext,"Unable to get List of Course Names");
            }
        });
        return cor;
    }
} 
我想知道如何使用Otto改进此结构?v 为什么我的这种结构会失败?
因为我无法从服务器获取课程列表

为什么这是在获得所有课程之前运行的

因为异步代码就是这样工作的

改造不是一个阻塞呼叫

如果您想在UI线程上从onResponse执行操作,甚至不需要EventBus库,只需将回调作为方法的参数

public void GetCoursesList(Callback<List<CourseInfo>> callback)  {
    api.getAllCourses(user.getApikey()).enqueue(callback);
} 
public void GetCoursesList(回调){
api.getAllCourses(user.getApikey()).enqueue(回调);
} 
该方法现在是无效的,因为改型没有阻止,所以在服务器请求发生时返回了一个空列表

@AfterViews
void setInits(){

    cc.GetCoursesList(new Callback<List<CourseInfo>>() {
        // TODO: Implement the interface 
     } );

    Toast.makeText(this,"Why this is running before getting all courses??",Toast.LENGTH_LONG).show();

}
@afterview
void setInits(){
cc.GetCoursesList(新回调(){
//TODO:实现接口
} );
Toast.makeText(这是“为什么在获得所有课程之前运行此操作?”),Toast.LENGTH_LONG.show();
}

Otto过时了,你应该考虑使用EngestBu3感谢小费,那么我的GET请求问题呢?还是RXJava/RxAndroid。我相信改型也有Rx绑定我对Android注释了解不够,无法回答这一部分,不幸的是:)关于这个问题,我不明白你的问题是什么。您在响应中所做的只是将一个集合复制到另一个集合,但我的应用程序将给出一条著名的消息
应用程序无响应
如何?您仍然没有阻塞UI线程,回调在改装请求完成后发生,您将获得所需的列表。试一试,看看会发生什么事,我想等到我所有的课程都完成后再做什么?我不能在onResponse中这样做,因为我想对主要活动隐藏它的逻辑,如问题示例中所示。不过,你问题中的示例并没有达到你的预期效果。你不能完全隐藏细节——你需要以某种方式将列表返回到活动中,我所展示的内容只需要改进,实际上,不需要其他库。
@AfterViews
void setInits(){

    cc.GetCoursesList(new Callback<List<CourseInfo>>() {
        // TODO: Implement the interface 
     } );

    Toast.makeText(this,"Why this is running before getting all courses??",Toast.LENGTH_LONG).show();

}