【问题标题】:Callback function in AndroidAndroid中的回调函数
【发布时间】:2016-03-10 20:35:30
【问题描述】:

我正在使用 Volley 向我的 Web Api 发出 Http 请求。 但是,由于 Volley 的异步特性,我无法从我的 api 调用中获取值。 我已经读过使用回调函数可以帮助解决这个问题,但是我不知道如何实现这样的解决方案。

在以下场景中我将如何实现回调函数?

public class Main
{
   String name;

   WebServiceConnections wsc = new WebServiceConnections();
   name = wsc.getNameFromWeb();

   System.out.println("Name: " + name);
}  



public class WebServiceConnections
{
    public String getNameFromWeb()
    {
        String url = "http://nameservice.net/GetName";

        JsonArrayRequest req = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try {
                        return response.getString("Name");
                    }
                    catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
            }
        });
    }
}

此代码的问题是,当调用打印语句时,Main 中的变量“name”将为空,因为 WebServiceConnections 类中的异步方法不会在调用打印语句时完成。

回调是解决这个问题的好方法吗?

【问题讨论】:

标签: java http asynchronous callback android-volley


【解决方案1】:

您的代码无法编译 - 您无法在返回类型为 void 的方法中返回值。 您的 onResponse 方法回调。在方法本身内执行打印。

【讨论】:

  • 那段代码我只是在那里快速写的,仅供参考,以便解释解决方案,不用于实际编译。
  • 我知道我可以在 volley 方法中执行操作.. 但是如果我想以示例所示的方式使用它,是否可以通过其他方式进行操作?
  • 创建一个扩展 Response.Listener 的类而不是匿名函数。这是要走的路,无需寻求其他解决方案,因为那是您的回调。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多