链接从Observable.create()

时间:2017-09-23 04:02:30

标签: android facebook-graph-api kotlin rx-java

我试图实现一个基本的RxJava链接调用

  1. 从Facebook Graph API获取用户名和照片
  2. 使用该信息然后注册我的后端服务
  3. 所以我尝试使用下面的flatMap

    getProfileFromFacebook().flatMap { user -> userRepository.createUser(user) }
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                    { Log.d("test", "onNext") }, 
                    { Log.d("test", "onError") },
                    { Log.d("test", "onComplete") })
    

    奇怪的是,订阅者中的所有日志记录都没有打印出来。

    所以我尝试用Observable.just(User())替换getProfleFromFacebook()。这次它工作,onNext打印出来。所以我猜问题出在getProfleFromFacebook()。这是它的实现

    fun getProfileFromFacebook(): Observable<User> {
        return Observable.create<User>({ emitter ->
            val request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken()) {
                _, _ ->
                emitter.onNext(User())
                emitter.onCompleted()
            }
            val parameters = Bundle()
            parameters.putString("fields", "name,picture")
            request.parameters = parameters
            request.executeAsync()
        }, Emitter.BackpressureMode.BUFFER)
    }
    

    我已经通过添加更多日志记录进行检查,发现flatMap函数确实使用用户对象获取事件但由于某种原因,它似乎没有实际执行来自userRepository.createUser的Observable返回( )。

    如果我将Graph API调用从executeAsync()更改为executeAndWait(),它可以正常工作。那是为什么?

    我在这里可能做错了什么?

0 个答案:

没有答案