public void generatePrivateToken(){
mNewControl.obstest(GETTOKEN)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Response<ResponseBody>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Response<ResponseBody> responseBodyResponse) {
key = responseBodyResponse.headers().get("Token");
new ApiKeys().encryptToken(key, new GeneralCallback() {
@Override
public void onSuccess(String token) {
Log.e("Token", token);
client = new HttpClient(USERNAME,token, emptyTag, emptyTag).getClient();
}
});
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void getControlData(){
generatePrivateToken();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(HOST_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
newControl service = retrofit.create(newControl.class);
Call<List<GetControlData>> call = service.controlData(CONTROL);
call.enqueue(new Callback<List<GetControlData>>() {
@Override
public void onResponse(Call<List<GetControlData>> call, Response<List<GetControlData>> response) {
//do something, start new retrofit method
}
@Override
public void onFailure(Call<List<GetControlData>> call, Throwable t) {
}
});
}
你的问题是众所周知的,这就是为什么我们需要rx可以观察到的,而不是正常的回调。看这个答案。
假设您不想发出多个改型请求,并等待所有请求完成,可以使用zip运算符
让我们首先定义我们的改型对象
Retrofit repo = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
Observable<JsonObject> userObservable = repo
.create(GitHubUser.class)
.getUser(loginName)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<JsonArray> eventsObservable = repo
.create(GitHubEvents.class)
.listEvents(loginName)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
public class UserAndEvents {
public UserAndEvents(JsonObject user, JsonArray events) {
this.events = events;
this.user = user;
}
public JsonArray events;
public JsonObject user;
}
Observable<UserAndEvents> combined = Observable.zip(userObservable, eventsObservable, new Func2<JsonObject, JsonArray, UserAndEvents>() {
@Override
public UserAndEvents call(JsonObject jsonObject, JsonArray jsonElements) {
return new UserAndEvents(jsonObject, jsonElements);
}
});
问题内容: 当使用简单的回调(例如下面的示例)时: 如何更改功能以使用异步/等待?具体来说,假设“ someEvent”被保证只能被调用一次,那么我希望函数测试是一个异步函数,该异步函数在执行回调之前不会返回,例如: 问题答案: 不是魔术。异步函数是可以为您解开Promises的函数,因此您需要返回一个Promise才能起作用。像这样: 然后 但这也是一个谎言,因为异步函数也返回Promises本
使用以下示例中的简单回调时: 如何将函数更改为使用异步/等待?具体地说,假设某个事件保证被调用一次并且只有一次,我希望函数测试是一个异步函数,直到执行回调才返回,例如:
我有一个windows服务,我从另一个开发人员继承,它运行非常慢,并有许多对eBay API的缓慢调用。我希望在没有太多重构的情况下加快它。 我刚刚开始研究使用C#Async/Await来尝试让这些缓慢的调用运行异步。以下是我试图实现的目标: 如何获取返回的类型以便使用它们?我尝试使用,但它只有属性可用。
这是一个提倡的范例,即 wait() 应该在同步块内的 while 循环中调用。 我的问题是,waiting()线程如何获得锁? 考虑线程1首先运行并开始等待条件。它释放锁,线程2获得锁设置条件并通知线程1。现在线程1获得锁,检查条件并开始执行“做某事”。 我的问题是当线程1被通知它从time条件开始执行时,已同步(mon)的代码行永远不会再次执行,那么线程1如何获得锁?将锁还给线程1的内部动态是
问题内容: 我的代码在javascript中看起来像这样: 在完成所有这些异步调用之后,我想计算所有数组的最小值。 我要如何等待所有人? 我现在唯一的想法是拥有一个名为done的布尔数组,并在第i个回调函数中将done [i]设置为true,然后说while(不是全部都完成了){} 编辑:我想一个可能但很丑陋的解决方案是在每个回调中编辑完了的数组,然后如果每个回调中都设置了所有其他完成,则调用一个
问题内容: 我有一个需要登录的服务器端功能。如果用户已登录,则函数将在成功返回1。如果没有,该函数将返回登录页面。 我想使用Ajax和jQuery调用该函数。我要做的是使用普通链接提交请求,并应用点击功能。如果用户未登录或功能失败,我希望Ajax调用返回true,以便href触发。 但是,当我使用以下代码时,该函数在Ajax调用完成之前退出。 如何将用户正常重定向到登录页面? 问题答案: 如果您不