在内部类中访问变量“name”。需要宣布最终

时间:2013-11-09 11:39:16

标签: java

所以标题说明了一切。我在JsonObjectRequest

中遇到了编译错误

我确信这是一个非常简单的修复,但我不确定如何编写它。我还处于Android开发的早期阶段,所以请原谅我的诺言。 :)

这是代码。

public class Api {

public static final String SEARCH_URL = "http://api.worldoftanks.ru/2.0/account/list/?application_id=171745d21f7f98fd8878771da1000a31&search=";
private RequestQueue mQueue;
private ArrayList<String> mNames;

public Api(Context context) {
    mQueue = Volley.newRequestQueue(context);
}

public ArrayList<String> searchPlayer(String name) {


    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, SEARCH_URL + name, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject json) {

            try {
                JSONArray data = json.getJSONArray("data");
                for (int i = 0; i < data.length(); i++) {
                    JSONObject c = data.getJSONObject(i);

                    String n = name.getString("nickname");
                    mNames.add(n);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("Error", error.getMessage());
        }
    }
    );

    mQueue.add(jsonObjectRequest);
    return mNames;
}

}

2 个答案:

答案 0 :(得分:5)

如错误所示,请替换

public ArrayList<String> searchPlayer(String name)

public ArrayList<String> searchPlayer(final String name)

必须声明参数final以确保它永远不会被方法中的代码更改,因此可以安全地在响应侦听器中使用。

答案 1 :(得分:3)

final添加到参数声明中:

public ArrayList<String> searchPlayer(final String name)