java - 如何在 Java/Android 的回调函数中设置局部变量?

标签 java android callback

如何在下面的 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

关于java - 如何在 Java/Android 的回调函数中设置局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307904/

相关文章:

Android:过渡到下一个 .java 的问题?

android - 如何在不使使用该数据库的线程出错的情况下删除所有表(但不删除表本身)

swift - 从未调用过 NEVPNManager saveToPreferences/loadFromPreferences 回调

javascript - jQuery 函数 : pass callback functions as optional arguments to another function

java - Eclipse:用于获取类属性列表的键绑定(bind)

java - objectify/google 应用引擎中的外键

java - CucumberOptions 无法解析为类型

java - 导入通配符是否始终导入所有内容?

java - 安卓 GoogleMap getProjection() 不工作

c++ - 装饰器模式 : how can I call(back) some members of decorator wrappers from the core class