无法返回凌空的结果

时间:2018-01-20 17:58:08

标签: java android android-volley

我正在尝试返回由Volley传递的结果,但我无法这样做。这就是我所拥有的:

private List<Entity> loadEntity()
{
    final EntityValueObject<Entity> entityDTO = new EntityValueObject<>();
    RequestUtils.inst(this).doGetArray(URL, (response) ->
            {
                entityDTO.setEntity(creating entity from json here);
            },
            (VolleyError error) -> Log.d("loading tag", error.toString()));


    return entityDTO.getEntity();
}

EntityValueObject只是一个DTO,它存储来自Volley的onResponse的结果。我做了一些调试,我无法弄清楚为什么getEntity()方法返回null。我可以从收到的JSON中成功创建实体。

方法签名如下所示:

public void doGetArray(final String url, final Response.Listener<JSONArray> responseListener, Response.ErrorListener errorListener)

我做错了什么?我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我相信doGetArray()是网络调用所以它会在后台发生。您正在返回entityDTO.getEntity();这发生在主线程中。因此,entityDTO.getEntity()将在doGetArray()完成执行之前执行。 因此entityDTO.getEntity将返回null。

你应该这样。

private void loadEntity()
{
    final EntityValueObject<Entity> entityDTO = new EntityValueObject<>();
    RequestUtils.inst(this).doGetArray(URL, (response) ->
            {
                entityDTO.setEntity(creating entity from json here);
                **call your method here which handled your entityDTO response / may be UI update**
            },
            (VolleyError error) -> Log.d("loading tag", error.toString()));

}