如何在下面的onResponse()回调中设置局部变量publicIpAddress? “ publicIpAddress = response”行出现错误“无法分配最终局部变量publicIpAddress,因为它是用封闭类型定义的”

public static String getPublicIpAddress(Context context)
    {
        String publicIpAddress = "";

        StringRequest jsonObjectRequest = new StringRequest(Request.Method.GET,
                                                                    "http://icanhazip.com/",
                                                                    new Response.Listener<String>()
        {
            @Override
            public void onResponse(String response) {
                publicIpAddress = response;
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Error in getPublicIpAddress()");
            }
        });

        VolleySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);

        return publicIpAddress;
    }

最佳答案

绝对不建议这样做。您发出的请求是异步的,并且始终会返回null或“”-初始化publicIpAddress时使用的任何值。
在将StringRequest放入队列之后,您的方法将有机会执行onResponse方法,然后立即返回。返回发生在调用此代码之前:publicIpAddress = response;

阅读此内容:Asynchronous HTTP Requests in Android Using Volley

10-08 07:58