【问题标题】:Retrofit2 - List ends up null, even after populated.Retrofit2 - 列表最终为空,即使在填充之后也是如此。
【发布时间】:2018-01-09 14:38:39
【问题描述】:

问题是全局变量“responseDogs”在方法结束时被返回为 null,但填充在 onResponse 方法中!?

代码:

public class DogREST {


private List<Dog> responseDogs;

//...


public List<Dog> retrieveDogsFromREST() {


    final DogService dogService = DogService.serviceDog;


    dogService.getDogs(AuthRequest.createAuthJsonString()).enqueue(new Callback<DogList>() {
        @Override
        public void onResponse(Call<DogList> call, Response<DogList> response) {

            if (response.isSuccessful()) {

                responseDogs = response.body().getDogs();


                Log.d("DogRESTSuccessful", "" + response.body().getDogs());
                Log.d("dogsReceived - >", "" + responseDogs);


            } else {

                Log.d("DogRESTNSuccessful", "- statusCode" + response.code());

            }

        }


        @Override
        public void onFailure(Call<DogList> call, Throwable t) {

            //...

        }


    });


    Log.d("onRetrieveDR", ""+ responseDogs);
    return reponseDogs;
}
}

注意 ->> "Log.d("DogRESTSuccessful", "" + response.body().getDogs())" 和 "Log.d("dogsReceived - >", "" + responseDogs)" 显示填充响应狗...

但retrieveDogsFromREST 返回空列表,“Log.d("onRetrieveDR", ""+ responseDogs)"也是如此

也许我写错了逻辑?身份证

【问题讨论】:

  • 用response.body() 填充一个列表,然后返回,这样我就可以得到结果并在以后使用它。主要问题是该方法返回一个空列表,但如果它已填充在 onResponse() 中,这怎么可能?

标签: java android rest logic retrofit2


【解决方案1】:

你的逻辑有一个简单的误解。发出请求的线程是异步,这意味着它最终会在您的应用程序运行时执行。即使您的请求很快,它也会始终返回 null,因为线程没有时间更新它。

我对你的建议是,一旦你的 onResponse 被调用 通知,请发送 Observer pattern em> 系统并触发更新您需要更新的视图的事件。

通常人们最终会在post中做类似的事情

【讨论】:

  • 所以,我将尝试在 AsyncTask 类中的 doInBackground 上调用 service.execute(...),然后使用 onPostExecute 更新视图。它可能真的有效。
  • 在这个例子中使用了 rxandroid2 (medium.com/@mtrax/…) 并且工作得很好!感谢您的提醒!
【解决方案2】:

您确定您收到的响应正文与您的模型类中的结构完全相同吗?您的 JSON 是否有一个包装您的 responseDogs 列表的上层对象?我之所以这么问,是因为如果没有提供 JSON 响应样本,很难对这个案例做出一些假设。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多