Java 可观察对象<;T>;with subscribe()不打印值

Java 可观察对象<;T>;with subscribe()不打印值,java,observable,rx-java2,Java,Observable,Rx Java2,我已经试着理解rxJava Observable一天多了,但我就是想不出我的案例需要什么。我认为,因为我不是在创建一个可观察的对象,而是仅仅从API调用返回一个可观察的对象,我需要可观察类型的类,这样我就可以使用该类的对象属性 这是我的代码,但是当我运行print语句时,它会被完全跳过。如何使用包装在观察者中的对象属性 // Define woman friend by creating their own large person group person. // Returns an Obs

我已经试着理解rxJava Observable一天多了,但我就是想不出我的案例需要什么。我认为,因为我不是在创建一个可观察的对象,而是仅仅从API调用返回一个可观察的对象,我需要可观察类型的类,这样我就可以使用该类的对象属性

这是我的代码,但是当我运行print语句时,它会被完全跳过。如何使用包装在观察者中的对象属性

// Define woman friend by creating their own large person group person.
// Returns an Observable<Person>.
rx.Observable<Person> personW = client.largePersonGroupPersons()
    .createAsync(largePersonGroupId, new CreateLargePersonGroupPersonsOptionalParameter().withName("Woman"));
System.out.println("Creating Large Person Group Person called "); 
personW.subscribe(response -> System.out.print(response.name()));
//通过创建自己的大人物群来定义女性朋友。
//返回一个可观察的。
rx.Observable personW=client.largePersonGroupPersons()
.createAsync(largePersonGroupId,新的CreateLargePersonGroupPersonOptionalParameter().withName(“Woman”);
System.out.println(“创建被调用的大型人员组”);
personW.subscribe(response->System.out.print(response.name());

如果从main()函数调用此代码,您将看不到日志,我认为此函数
createAsync(…)
在后台线程中工作,因此要返回到主线程,您有两个选项

干净的是使用
ObserveOn()
所以代码是这样的

    rx.Observable<Person> personW = client.largePersonGroupPersons()
    .createAsync(largePersonGroupId, new CreateLargePersonGroupPersonsOptionalParameter().withName("Woman"))
.observeOn(mainthread())//get result in the main thread
        .subscribe(result -> {
            System.out.println("Creating Large Person Group Person called "); 
    })
rx.Observable personW=client.largePersonGroupPersons()
.createAsync(largePersonGroupId,新的CreateLargePersonGroupPersonOptionalParameter().withName(“Woman”))
.observeOn(mainthread())//在主线程中获取结果
.订阅(结果->{
System.out.println(“创建被调用的大型人员组”);
})
这个
mainthread()
应该返回一个调度程序,这要由您来确定,在Android中,我们通过
observeOn(AndroidSchedulers.mainthread())


第二个选项是如您所述放置
blockingGet()
,但这将冻结线程

如果调用确实是异步的,则需要等待调用
print
。例如,在主方法中睡眠。另外,不要忽略onError回调,因为您可能实际收到的是错误而不是响应。我还在调试中查找了该方法,它实际上返回了一个Observable.OnSubscribe接口,该接口只有一个函数Call()。那会有什么不同吗?另外,我在try/catch中有一个更大的方法,它和onError()一样好吗?哪个方法?另外,try-catch不能处理异步序列。事实证明,我能够通过电子邮件向PM发送SDK,他建议使用
.toblock().single()
,效果非常好。我猜这是一个异步特性,该方法没有及时完成print语句。感谢Mohamed,我确实听说使用blocking()不是最好的解决方案。但除非我得到坏结果,否则我现在就用它。谢谢你的选择!它看起来又漂亮又短。不客气@Azurespot。如果你能接受我的答案,如果它对你有用的话,我将不胜感激you@Mohammed,我最终没有使用您的解决方案,但也许其他人会使用!