【发布时间】:2018-02-13 09:16:53
【问题描述】:
我正在使用 Java 在 Android Studio 中编写应用程序,但遇到了问题。我有这样的课
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
}
}
问题是在匿名类内部(位置 1),elements 变量正在改变他的内容,之后(位置 2)变量保持为空。为什么会这样?谢谢你,祝你有美好的一天。
【问题讨论】:
-
查看您的日志。哪条线路先运行?
-
你有没有尝试将变量声明为final
-
是的,您只是在定义回调侦听器,它很可能会在 (2) 处的 println 已经运行后稍后运行
-
看一眼你的代码,看起来第 2 行可以在第 1 行之前运行
-
是的。看起来第 2 行在第 1 行之前运行。
标签: java android android-volley anonymous-class