我正在使用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类中的异步方法将不会完成。
回调是解决此问题的好方法吗?
答案 0 :(得分:0)
您的代码无法编译 - 您无法在具有void返回类型的方法中返回值。 您的onResponse方法是回调。在方法本身内执行打印。