我的要求:
null或错误对象,而成功的调用返回ResponseBody对象.是)我有的:
Observable<ResponseBody> api1Call = api1.fetchData();
Observable<ResponseBody> api2Call = api2.fetchData();
Observable<ResponseBody> api3Call = api3.fetchData();
Observable.combineLatest(api1Call, api2Call, api3Call, new Func2<ResponseBody, ResponseBody, ResponseBody, Object>() {
@Override
public Object call(ResponseBody responseBody1, ResponseBody responseBody2, ResponseBody responseBody3) {
Logger.i("what does this do? - '%s', '%s', '%s'", responseBody1, responseBody2, responseBody3);
return null;
}
}).onErrorResumeNext(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable throwable) {
Logger.e(throwable, "some error with one of the apis?");
return Observable.empty();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onCompleted() {
Logger.i("onCompleted");
}
@Override
public void onError(Throwable e) {
Logger.e(e, "onError");
}
@Override
public void onNext(Object o) {
Logger.i("onNext " + o);
}
});
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
some error with one of the apis?
// stacktrace of the error
onCompleted
Run Code Online (Sandbox Code Playgroud)
我是RxJava的新手,非常困惑.我在StackOverflow上找到了一些答案说zip类似的东西,但它甚至超出了我的要求.我猜测其中一个"组合"操作符+正确的异常处理将做我需要的.到目前为止,我们很难弄清楚这一点
我正在使用的版本:
compile 'io.reactivex:rxjava:1.3.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
Run Code Online (Sandbox Code Playgroud)
你无法通过实现并行combineLast或者zip,rxjava按顺序在我的测试将执行并发出您的项目.
如果您的某个任务失败,Func2#call则不会被调用,onError而是会提交.您甚至无法以这种方式获得其他成功任务的结果.
解决方案是flatMap,它是实现并发的传统方式rxjava.它也符合您的其他要求.
这是一个小但完整的例子.
我用一个简单的网站服务来测试.
我用a Semaphore来等待所有完成的任务,你可以完全忽略它.我将日志记录添加到http请求以便更好地理解,您也可以完全忽略它.
public interface WebsiteService {
@GET
Observable<ResponseBody> website(@Url String url);
}
Run Code Online (Sandbox Code Playgroud)
然后我使用以下内容来测试结果rxjava.
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.google.com")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(new OkHttpClient.Builder().addInterceptor(loggingInterceptor).build())
.build();
WebsiteService websiteService = retrofit.create(WebsiteService.class);
final Semaphore s = new Semaphore(1);
try {
s.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
Observable<ResponseBody> first = websiteService.website("http://github.com");
Observable<ResponseBody> second = websiteService.website("http://stackoverflow.com");
Observable<ResponseBody> third = websiteService.website("http://notexisting.com");
final int numberOfCalls = 3; // testing for three calls
Observable.just(first, second, third)
.flatMap(new Function<Observable<ResponseBody>, ObservableSource<ResponseBody>>() {
@Override
public ObservableSource<ResponseBody> apply(@NonNull Observable<ResponseBody> responseBodyObservable) throws Exception {
return responseBodyObservable.subscribeOn(Schedulers.computation());
}
})
.subscribeOn(Schedulers.computation())
.subscribe(new Observer<ResponseBody>() {
private int currentDoneCalls = 0;
private void checkShouldReleaseSemaphore() {
if (currentDoneCalls >= numberOfCalls) {
s.release();
}
}
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull ResponseBody responseBody) {
System.out.println("Retrofit call success " + responseBody.contentType());
synchronized (this) {
currentDoneCalls++;
}
checkShouldReleaseSemaphore();
}
@Override
public void onError(@NonNull Throwable e) {
System.out.println("Retrofit call failed " + e.getMessage());
synchronized (this) {
currentDoneCalls++;
}
checkShouldReleaseSemaphore();
}
@Override
public void onComplete() {
System.out.println("onComplete, All request success");
checkShouldReleaseSemaphore();
}
});
try {
s.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("All request done");
s.release();
}
Run Code Online (Sandbox Code Playgroud)
我使用rxjava2和改造adapter-rxjava2进行测试.
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.1'
Run Code Online (Sandbox Code Playgroud)
来自github的RxJava2的介绍页面指出了实现并列主义的实用方法.
实际上,RxJava中的并行性意味着运行独立流并将其结果合并为单个流.操作员
flatMap这样做......
虽然这个例子是基于的RxJava2,但操作flatMap已经存在RxJava.
感谢 @TinTran 和this,这是正确的解决方案:
\n(我现在无法为 Retrofit Observables 提供确切的语法,但这应该不重要,逻辑仍然是相同的 Retrofit 或不)
Observable.mergeDelayError(getData1(), getData2()).doAfterTerminate(new Action0() {\n @Override\n public void call() {\n Logger.i("end of all streams");\n tvTheText.setText("all streams finished");\n }\n }).subscribe(new PrintSubscriber<>("merge" +\n " delay w error"));\nRun Code Online (Sandbox Code Playgroud)\n\n可观察量(改造后的观察量应该以相同的方式工作):
\n\nprivate Observable<String> getData1() {\n return Observable.create(new Observable.OnSubscribe<String>() {\n @Override\n public void call(Subscriber<? super String> singleSubscriber) {\n try {\n long responseTime = 120 + new Random().nextInt(30);\n Thread.sleep(responseTime);\n } catch (InterruptedException e) {\n e.printStackTrace();\n }\n singleSubscriber.onNext("data 1");\n singleSubscriber.onCompleted();\n }\n }).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io());\n }\n\n private Observable<String> getData2() {\n return Observable.create(new Observable.OnSubscribe<String>() {\n @Override\n public void call(Subscriber<? super String> singleSubscriber) {\n try {\n long responseTime = 100 + new Random().nextInt(19);\n Thread.sleep(responseTime);\n } catch (InterruptedException e) {\n e.printStackTrace();\n }\n singleSubscriber.onError(new Exception());// this one never blocks the other Observables\' streams\n }\n }).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io());\n }\nRun Code Online (Sandbox Code Playgroud)\n\n输出日志:
\n\n 10-24 15:27:23.335 D: \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n10-24 15:27:23.335 D: \xe2\x94\x82 Thread: main\n10-24 15:27:23.335 D: \xe2\x94\x9c\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\n10-24 15:27:23.335 D: \xe2\x94\x82 SafeSubscriber.onNext (SafeSubscriber.java:134)\n10-24 15:27:23.335 D: \xe2\x94\x82 PrintSubscriber.onNext (PrintSubscriber.java:32)\n10-24 15:27:23.335 D: \xe2\x94\x9c\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\n10-24 15:27:23.336 D: \xe2\x94\x82 merge delay w error - onNext - data 1\n10-24 15:27:23.336 D: \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n10-24 15:27:23.342 V: \xe2\x87\xa2 onError(e=java.lang.Exception)\n10-24 15:27:23.342 V: \xe2\x87\xa0 onError [0ms]\n10-24 15:27:23.343 I: \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n10-24 15:27:23.343 I: \xe2\x94\x82 Thread: main\n10-24 15:27:23.343 I: \xe2\x94\x9c\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\n10-24 15:27:23.343 I: \xe2\x94\x82 OperatorDoAfterTerminate$1.callAction (OperatorDoAfterTerminate.java:73)\n10-24 15:27:23.343 I: \xe2\x94\x82 MainActivity$1.call (MainActivity.java:37)\n10-24 15:27:23.343 I: \xe2\x94\x9c\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\xe2\x94\x84\n10-24 15:27:23.344 I: \xe2\x94\x82 end of all streams\n10-24 15:27:23.344 I: \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5201 次 |
| 最近记录: |