Android中的回调函数

时间:2016-03-10 20:35:31

标签: java http asynchronous callback android-volley

我正在使用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());
            }
        });
    }
}

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

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

1 个答案:

答案 0 :(得分:0)

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