不兼容类型:Single 无法转换为Completable

问题描述 投票:-1回答:1

我试图在Vert.x的一个垂直版本中使用RxJava2

import io.reactivex.Completable;
import io.vertx.core.Promise;

public class MainVerticle extends io.vertx.reactivex.core.AbstractVerticle {


  @Override
  public Completable rxStart() {
    return vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    })
      .rxListen(8080);

  }
}

编译器抱怨:

 error: incompatible types: Single<HttpServer> cannot be converted to Completable
      .rxListen(8080);
               ^
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

我不知道,我应该调用哪种方法。

java rx-java2 vert.x
1个回答
0
投票
Single<HttpServer> rxListen(int port,String host)

从问题中返回Single Not Completable的实例尚不清楚您要执行的操作,但是如果您想在端口上侦听,则需要执行以下操作

public class MyVerticle extends AbstractVerticle {

 private HttpServer server;

 public void start(Future<Void> startFuture) {
   server = vertx.createHttpServer().requestHandler(req -> {
     req.response()
       .putHeader("content-type", "text/plain")
       .end("Hello from Vert.x!");
     });

   // Now bind the server:
   server.listen(8080, res -> {
     if (res.succeeded()) {
       startFuture.complete();
     } else {
       startFuture.fail(res.cause());
     }
   });
 }
}

如果要使用Completable,则需要订阅服务器并调用方法close

 Completable single = server.rxClose();

    // Subscribe to bind the server
    single.
      subscribe(
        () -> {
          // Server is closed
        },
        failure -> {
          // Server closed but encoutered issue
        }
      );
© www.soinside.com 2019 - 2024. All rights reserved.