java在收到截击响应后执行该方法
当我运行以下代码时, 我在日志中得到“空白”,而我希望它“截击结果”设置为截击请求生成的响应
然而,当我第二次运行相同的代码时,它显示正确
那么,如何在“courses”方法中保留“Log.i(-)”,直到截击结果到达为止
我有几种类似“课程”的方法,它们之间唯一的区别是它们调用的URL。 此外,它们都充当“OnButtonClickListner”,所以在“req”中调用“courses”不是一个选项
String volleyResult = "blank";
public void courses(View view) {
String url = "http://courses/list.json";
reqReturn(url, "Courses");
Log.i("Volley Res", volleyResult);
}
public void req(String url, final String type ) {
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
volleyResult = response;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
volleyResult = "error";
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Cookie", cookie);
return headers;
}
};
queue.add(stringRequest);
}
# 1 楼答案
在onResponse()中调用courses()
编辑以澄清:
你在回复中填写var截击结果。听众。这是异步的,所需时间取决于服务器延迟和internet连接。有几种方法可以“保持”你的处理方法,这些方法需要截击结果
最简单的方法: 移动进程(在你的例子中是Log.i(“截击结果”,截击结果)在onResponse方法中,将响应存储在volleyResult中之后
稍微干净一点: 将代码移动到新函数中,并从响应中调用它。侦听器方法:
如果您的courses方法被反复调用:您可以在收到数据时设置一个标志,并将代码放在if条件块的courses()中:
# 2 楼答案
使用OnResponse()方法打印日志。 如果OneRorResponse()方法中发生超时错误,请再次调用相同的API
# 3 楼答案
轻松放置日志。onResponse方法中的i()
另一个选项是使用wait()/notify()。你需要一个监控对象来处理一切
作为回应