我创建了一个活动,在其中将一些记录插入到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

07-27 15:10