我创建了一个活动,在其中将一些记录插入到mysql数据库中。我声明了一个名为lastInsertId
的全局变量。当我尝试println
方法内的变量onResponse
时,工作正常,但是当我尝试方法外的println
时返回null
。我还需要在方法之外使用此变量。该怎么办?
这是我的代码:
String insertUrl = "http://localhost/file.php";
String lastInsertId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, insertUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
lastInsertId = response.toString();
System.out.println(lastInsertId); // returns the lastInsertId
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
// parameters
return parameters;
}
};
requestQueue.add(request);
System.out.println(lastInsertId); // get's null
}
谢谢!
最佳答案
它们是不同的结果,因为尽管您将请求触发到本地HTTP服务器,但是在设置lastInsertId之前,将触发最后一个println。
您需要考虑多线程。您的HTTP请求在后台运行,UI线程正在继续。因此,执行顺序与示例中代码出现的顺序不同。
请求队列已创建
请求已创建
请求已添加到队列(大概也开始了HTTP调用)
打印出lastInsertId(空)
从您的响应中设置了lastInsertId
打印出lastInsertId