如何正确编写截击回调

问题描述 投票:0回答:1

我正在尝试编写一个凌空获取请求,以获取我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请求,我无法真正指出我的代码错误。

android rest android-volley
1个回答
0
投票

getAllUsers函数在将get请求放入后台线程后立即返回allUsers。就是说,当API的后台线程尚未完成获取用户列表时,您将获得用户列表,因此,您是第一次获取空列表。

© www.soinside.com 2019 - 2024. All rights reserved.