我在FINAL变量中遇到问题。
它总是要求我声明它是最终的,但如果我宣布它为最终它不能增加。
这是我的代码:
for(int i=0;i<longLat.size();i++) {
StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println(response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
/*Im having a problem here because i need to load
more than one 'POILongLat' so i put it in arrayList
but it keeps asking me to make it final*/
parameters.put("POILongLat", longLat.get(i));
parameters.put("POIAddress", "Addresses");
return parameters;
}
};
requestQueue.add(request);
}
谢谢!
答案 0 :(得分:2)
你可以用这个技巧做到这一点:
for(int i=0;i<longLat.size();i++) {
final int valueThisIteration = i;
....
parameters.put("POILongLat", longLat.get(valueThisIteration));
...
}
这样每次迭代都会有一个新的final
变量,Java很高兴。
它必须是final
的原因与Android或Android Studio无关。这是因为您尝试使用i
值的范围处于一个完全不同的位置&amp;代码在完全不同的时间执行,甚至可能是不同的线程。从那个地方开始,i
的for循环可能已经很久了。