我有一个单击监听器,在该单击监听器中,有一个if语句,如下所示

  @Override
        public void onClick(View v) {
            postMethodRegister();
            System.out.println("mSuccess is set to " + mSuccess);
            if (mSuccess) {
                Intent login = new Intent(Login.this, MainActivity.class);
                startActivity(login);
            }else{
                Toast toast = Toast.makeText(getApplicationContext(), "Please Check your UserName or Password", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 0);
                toast.show();
            }
        }


我还有一个布尔变量,默认情况下设置为false,私有布尔mSuccess;如果执行了onResponse,则将其设置为true,否则将其设置为false并执行适当的响应,但是由于某种原因,第一次登录尝试将运行onResponse,但是当它到达onClick时,mSuccess设置为假这是怎么回事? mSuccess是一个实例变量。

 public void postMethodRegister() {
    StringRequest request = new StringRequest(Request.Method.POST, loginUrl, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            System.out.println("On Response was thrown in Login"+response);
            mSuccess=true;
        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            System.out.println("Error was thrown in Login" + error.getMessage()+"and the response code is ");
            mSuccess=false;

        }
    })

最佳答案

postMethodRegister()方法发出异步请求。

因此,当您单击按钮时,onClick()会被调用,而该按钮又会调用postMethodRegister()
然后postMethodRegister()发出异步网络请求,这意味着您的网络请求将在另一个线程中运行,然后您的控件将立即移动到postMethodRegister()之后的下一行,即System.out.println("mSuccess is set to " + mSuccess);。现在,由于您尚未收到onResponse()的响应,因此mSuccess将保持不变(并且为false)。

关于java - 是否未设置onResponse boolean 实例变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36725647/

10-10 16:42