以下代码有效,我已经检查并仔细检查过。
但是,我无法在父方法上返回结果。
div
正如您所看到的,我试图获取特定值,上述结果始终为null。我也尝试将它放在一个全局私有变量上无济于事。
如果我执行public String[] getLatestStatus(String protocol) {
final String[] ress = {""};
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<SolicitationResponse> call = apiService.getProtocol(protocol, mMainVariables.getAPI_KEY());
call.enqueue(new Callback<SolicitationResponse>() {
@Override
public void onResponse(Call<SolicitationResponse> call, Response<SolicitationResponse> response) {
List<Solicitation> c = response.body().getData();
ress[0] = c.get(0).getStatus();
ress[1] = c.get(0).getReply();
}
@Override
public void onFailure(Call<SolicitationResponse> call, Throwable t) {
}
});
return ress;
}
而不是将其插入数组,则结果为实际值。
我甚至只尝试返回一个值,但是不能。
现在我考虑一下,排队是Async,这与它有什么关系吗?
答案 0 :(得分:0)
您无法从正在调用的方法返回异步数据。
在从API获得响应后,您应该在改装响应回调中执行此操作。
当你有一些API调用时,它将在不同的线程上执行 即。 后台主题可能需要更长时间才能获得回复。
其次当你调用一个方法来执行某种API调用时,它将在 MAIN-Thread 即ie上执行。 UI主题。
所以你需要等待后台线程的响应,但是我们不应该阻止UI线程,否则app可能会没有响应。
当您在后台线程中收到数据时,您有机会通过onResponse或onFailure回调在Ui线程上使用此数据。
public String[] getLatestStatus(String protocol) {
final String[] ress = {""};
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<SolicitationResponse> call = apiService.getProtocol(protocol, mMainVariables.getAPI_KEY());
call.enqueue(new Callback<SolicitationResponse>() {
@Override
public void onResponse(Call<SolicitationResponse> call, Response<SolicitationResponse> response) {
List<Solicitation> c = response.body().getData();
ress[0] = c.get(0).getStatus();
ress[1] = c.get(0).getReply();
//On this place only you can utilise the data
dummyUpdateData(ress);
}
@Override
public void onFailure(Call<SolicitationResponse> call, Throwable t) {
}
});
return ress;
}
答案 1 :(得分:0)
我不确定它是否是最佳解决方案,但我认为听众模式应该在这里工作..
响应后
myListener.onResponse(data);
主要活动
Implement and override Listener
并将侦听器传递给方法