当前位置: 首页 > 知识库问答 >
问题:

将响应返回为可流时未调用onComplete

燕志学
2023-03-14

我正在尝试使用改型和rxjava 2进行WebService调用。我在探索使用RxJava2的两种不同方法。问题是,当我使用可观察的,但不使用可流动的时,我得到了响应。使用Flowable时,日志没有打印出来。我试图调试它,但它没有进入下一步或完成中或错误中。仅执行订阅上的onSubscribe

1) 使用observable作为返回类型

new WebRequestManager().getContactObservable(userRequest)   
    .subscribe(new Observer<ResponseData>() {
                   @Override
                   public void onSubscribe(Disposable d) {

                   }

                   @Override
                   public void onNext(ResponseData responseData) {

                       Log.e(TAG , "data "+responseData.getStatus());
                   }

                   @Override
                   public void onError(Throwable e) {

                   }

                   @Override
                   public void onComplete() {

                       Log.e(TAG , "data complete");

                   }
               }
    );

2)使用可流动作为返回类型

new WebRequestManager().getContactFlowable(userRequest)

 .subscribe(new Subscriber<ResponseData>() {
     @Override
     public void onSubscribe(Subscription s) {

         Log.e(TAG , "contact subscription ");

     }

     @Override
     public void onNext(ResponseData responses) {

         Log.e(TAG , "contact onNext ");


     }

     @Override
     public void onError(Throwable t) {

     }

     @Override
     public void onComplete() {

         Log.e(TAG , "contact onComplete ");
     }
 });

静止触点改装api

public interface ContactApi {

    @POST(WebRequest.GET_CONTACTS)
    Flowable<ResponseData> getContactFlowable(@Body UserRequest userRequest);

    @POST(WebRequest.GET_CONTACTS)
    Observable<ResponseData> getContactObservable(@Body UserRequest userRequest);

}

调用webservice

public Flowable<ResponseData> getContactsData(UserRequest userRequest){
        return webRequest.getWebClient().create(ContactApi.class).getContacts(userRequest);


    }

    public Observable<ResponseData> getContact(UserRequest userRequest){
        return webRequest.getWebClient().create(ContactApi.class).getContact(userRequest);

    }

获取改造实例

 public static Retrofit getWebClient(){

        //if(okHttpClient == null)
            okHttpClient = new OkHttpClient.Builder()
                                    .connectTimeout(120,TimeUnit.SECONDS)
                                    .readTimeout(120,TimeUnit.SECONDS)
                                    .writeTimeout(120,TimeUnit.SECONDS)

                                    .addInterceptor(new WebRequestInterceptor("\"application/json\""))
                                    .build();


      // if(client == null)
        client = new  Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(LoganSquareConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        return client;
    }

共有1个答案

弓玉书
2023-03-14

使用Subscriber,您必须呼叫request以获取项目:

new WebRequestManager().getContactFlowable(userRequest)
    .subscribe(new Subscriber<ResponseData>() {
        @Override
        public void onSubscribe(Subscription s) {
            Log.e(TAG , "contact subscription ");
            s.request(Long.MAX_VALUE); // <---------------------------------
        }

        @Override
        public void onNext(ResponseData responses) {
            Log.e(TAG , "contact onNext ");
        }

        @Override
        public void onError(Throwable t) {

        }

        @Override
        public void onComplete() {
            Log.e(TAG , "contact onComplete ");
        }
   });

另请参阅DisposableSubscriber及其示例。

 类似资料:
  • 有很多使用OkHTTP3发出请求的例子,但是,我仍然无法发出正确的请求。据我所知,我的设置是正确的。 我不断收到如下所示的回复。我不知道他们是什么意思。 {“ContentLength”:238,“ContentTypeString”:“Application/JSON”,“Source”:{“Buffer”:{“Size”:0},“Closed”:False,“Source”:{“BytesRe

  • 问题内容: 我想向mysql发送查询并获取一个数组。但是,无论我怎样做,我都无法使它起作用。这是我的代码: 它总是说,。我究竟做错了什么? 问题答案: Flask抛出此异常,因为您的视图未返回任何内容。从您的观点返回响应: 要返回MySQL结果,也许将这些行连接到一个字符串中: 或定义一个模板并返回渲染的模板。 请注意,您确实不希望对参数使用字符串插值, 尤其是 在Web应用程序中。改用SQL参数

  • 问题内容: 我有一个发出异步请求的函数。我如何从中返回响应/结果? 我尝试从回调中返回值,以及将结果分配给函数内部的局部变量并返回该局部变量,但这些方法均未真正返回响应(它们都返回或变量的初始值为任意值) 。 使用jQuery函数的示例: 使用node.js的示例: 使用承诺块的示例: 问题答案: 在 一 中的Ajax代表 异步 。这意味着发送请求(或接收响应)已从正常执行流程中删除。在您的示例中

  • 使用promise的块的示例:

  • 我正在制作一个简单的Rest服务,它必须将JSON请求中的数据添加到数据库(MongoDB)中。当我向服务发出请求时出现问题,服务器会出现以下错误: Controller@0.0.0start C:\users\Fernando\Google Drive\tcc_Fernando_Felipe\Controller\Controller节点./bin/www {[Error:找不到模块“../bu

  • 这个问题可能有点抽象,但我正试图用做些什么,我被卡住了。 基本场景是这样的,我通过 Camel 公开一个 Web 服务 A,在这个服务中,有一个基于内容的路由来决定我是否必须调用 B 或 C,我想调用正确的路由,并且让 或 的响应成为我的服务 的响应 我已经使用 公开了网络服务,它运行良好,但我不知道之后如何进行路由,我想到了这个: 我不确定这是否是最好的方法,甚至这是否正确,但这是我想出来的。