我正在尝试编写一个凌空获取请求,以获取我API的所有用户。我已成功完成此操作,但是我的功能已停止工作。如果我现在运行代码并尝试获取所有用户,它将仅返回一个空数组。如果我尝试在不停止运行的情况下再获取一次它们,它将返回给我所有用户。
这是我的功能:
public ArrayList<User> getAllUsers(final VolleyCallBack callBack) {
requestQueue = Volley.newRequestQueue(this);
JsonArrayRequest arrayRequest = new JsonArrayRequest(
Request.Method.GET,
"http://ecoproduce.eu/api/User",
null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.e("Rest response", response.toString());
Gson gson = new Gson();
User user = new User();
for (int i = 0; i < response.length(); i++) {
try {
user = gson.fromJson(response.getJSONObject(i).toString(), User.class);
} catch (JSONException e) {
e.printStackTrace();
}
allUsers.add(user);
}
callBack.onSuccess();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error response", error.toString());
}
}
);
requestQueue.add(arrayRequest);
return allUsers;
}
这是我的回调接口:
public interface VolleyCallBack {
ArrayList<User> onSuccess();
}
这就是我调用该函数的方式:
ArrayList<User> currentUsers;
currentUsers = getAllUsers(new VolleyCallBack() {
@Override
public ArrayList<User> onSuccess() {
Log.e("Bla", "ALL DONE!!!");
return allUsers;
}
});
我不知道问题是什么,它像一个小时前一样正常工作,但是由于某种原因它已经停止了。这是我第一次尝试编写RESTful请求,我无法真正指出我的代码错误。
getAllUsers
函数在将get请求放入后台线程后立即返回allUsers
。就是说,当API的后台线程尚未完成获取用户列表时,您将获得用户列表,因此,您是第一次获取空列表。