改造 - 无法获得onResponse的结果值OUT

时间:2017-05-31 01:25:49

标签: android retrofit

以下代码有效,我已经检查并仔细检查过。

但是,我无法在父方法上返回结果。

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,这与它有什么关系吗?

2 个答案:

答案 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

并将侦听器传递给方法