Groovy HTTPBuilder + RxJava returns 一个空 object/observable
Groovy HTTPBuilder + RxJava returns an empty object/observable
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()
})
}
所以这是我在服务 class 中编写的调用 Firebase 身份验证 REST API 登录的方法。但现在的问题是它 return 没有给我任何数据。
我在 Intellij 中对此进行调试,我发现当我执行 login.subscribe 时,我期望它对我来说是 return json,但它没有。
那我做错了什么?
我不是 Groovy 开发者,但这行似乎有误:
return Observable.just({ Observer observer ->
您正在创建一个 lambda 对象,仅由其返回,但内部没有真正执行。您可能正在寻找
return Observable.create({ Emitter emitter ->
编辑:
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()
})
}
所以这是我在服务 class 中编写的调用 Firebase 身份验证 REST API 登录的方法。但现在的问题是它 return 没有给我任何数据。
我在 Intellij 中对此进行调试,我发现当我执行 login.subscribe 时,我期望它对我来说是 return json,但它没有。
那我做错了什么?
我不是 Groovy 开发者,但这行似乎有误:
return Observable.just({ Observer observer ->
您正在创建一个 lambda 对象,仅由其返回,但内部没有真正执行。您可能正在寻找
return Observable.create({ Emitter emitter ->
编辑: