我正在尝试返回由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)
我做错了什么?我怎么能这样做?
答案 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()));
}