成员变量不能被匿名改变class

Member variable cannot be changed by annomyous class

我正在使用 Java 在 Android Studio 中编写应用程序,但我遇到了问题。我有一个这样的class

class MyListener implements AdapterView.OnItemClickListener {

    ArrayList<Element> elements = new ArrayList<>(); 

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     databaseServer.addToRequestQueue(new StringRequest(
                Request.Method.POST,
                DatabaseServerDetails.ELEMENTS_PAGE,
                new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONArray jsonArray = new JSONArray(response);
                            elements.addAll(Element.extractData(response));
                            System.out.println(elements);-------------->1

                        } catch (JSONException e) {

                            e.printStackTrace();
                        }


                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                        Log.e("requestJoinDietsWithMeals",   error.getLocalizedMessage());
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("elementID", elementID + "");
                return params;
            }
        });
        System.out.println(elements); ------------>2
    }


}

问题是在匿名 class(位置 1)中,elements 变量正在更改其内容,之后(位置 2)变量保持为空。为什么会这样?谢谢你,祝你有美好的一天。

您的元素变量在位置 2 中为空,因为您 运行 在 database.addToRequestQueue 调用中的代码是 运行 异步调用的。

这意味着该函数不是在调用的同一时刻执行的,而是有延迟。

所以发生的事情是您的用户点击,onClick 事件处理程序被调用,对数据库的请求被添加到队列中,紧接着您打印您的空元素集合,然后您的请求仅在未知的时间量,您的列表已填充。

您要做的是将所有使用该集合的代码移动到响应侦听器(位置 1)内。