def login(String email, String password, String apiKey) throws HttpResponseException { 
 
    def postBody = [ 
            email   : email, 
            password: password 
    ] 
 
    def http = new HTTPBuilder('https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=' + apiKey) 
 
    return Observable.just({ Observer observer -> 
 
        def thread = new Thread({ 
 
            http.post(body: postBody, requestContentType: ContentType.JSON) { resp, json  -> 
                println 'status code ' + resp.statusLine.statusCode 
                if (resp.statusLine.statusCode == 200 || resp.statusLine.statusCode == 201) { 
                    observer.onNext(json) 
                } else { 
                    observer.onError(new Throwable('broken')) 
                } 
 
                observer.onCompleted() 
 
            } 
 
            http.handler.failure = { resp -> 
                observer.onError(new Throwable('failure')) 
                observer.onCompleted() 
 
            } 
 
            http.handler.'400' = { resp -> 
                observer.onError(new Throwable('bad request')) 
                observer.onCompleted() 
 
            } 
 
        } as Runnable) 
 
        thread.start() 
 
        return Subscriptions.empty() 
    }) 
} 

因此,这是我在服务类中编写的用于调用Firebase auth REST API的登录名的方法。但是现在的事情是它没有返回任何数据。

我在Intellij中调试了此程序,结果发现当我执行login.subscribe时,我期望它可以将json返回给我,但是没有。

那我做错了什么?

请您参考如下方法:

我不是Groovy开发人员,但此行似乎是错误的:

return Observable.just({ Observer observer -> 

您正在创建一个lambda对象,该对象只能由其返回,但实际上没有任何内容被执行。您可能正在寻找
return Observable.create({ Emitter emitter ->  

编辑:

JavaDoc


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!