【发布时间】:2020-03-15 15:03:02
【问题描述】:
我想使用 RxJava 和 RxAndroid 进行以下异步网络调用。我在项目依赖项中包含了最新的RxJava (3.0.1) 和RxAndroid (3.0.0),但在Subscription subscription = .... 块中仍然出现以下错误:
不兼容的类型
必需:org.reactivestreams.Subscription
找到:无效
这是为什么呢?谁能告诉我如何让这个 RxJava observable 工作?
感谢任何帮助。
Subscription subscription = getServerResponse(et_id.getText().toString())// error highlighted in this whole block
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(String bitmap) {
// Handle result of network request
}
@Override
public void onError(@NonNull Throwable e) {
// Update user interface to handle error
}
@Override
public void onComplete() {
// Update user interface if needed
}
});
public Observable<String> getServerResponse(String string) {
return Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
BufferedReader inFromServer = null;
String response = "";
Socket clientSocket = null;
try {
clientSocket = new Socket(serverHostname, serverPort);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outToServer.writeBytes(string + "\n");
response = inFromServer.readLine();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
response = MainActivity.this.getString(R.string.result_serverError);
}
return response;
}
});
}
我对反应式 Java 的所有导入:
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
【问题讨论】:
-
检查你的导入,也许你使用了错误的 observable。
-
我使用
import io.reactivex.rxjava3.core.Observable;。这样不行吗? -
这对你有用吗?你是从 1.x 迁移过来的吗?请阅读this 部分。
标签: java android observable rx-java rx-android