【问题标题】:onResponse boolean instance variable is not being set?onResponse 布尔实例变量没有被设置?
【发布时间】:2016-04-19 17:39:57
【问题描述】:

我有一个 on click 监听器,在那个 on click 监听器中,我有一个 if, else 语句,如下

  @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;

        }
    })

【问题讨论】:

    标签: java android json boolean response


    【解决方案1】:

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

    因此,当您单击按钮时,onClick() 会被调用,而该按钮又会调用 postMethodRegister()。 然后postMethodRegister() 发出一个异步网络请求,这意味着您的网络请求将在另一个线程中运行,然后您的控件将立即移至postMethodRegister() 之后的下一行,即System.out.println("mSuccess is set to " + mSuccess);。现在在这一点上,因为您还没有收到来自 onResponse() 的回复,所以 mSuccess 将保持不变(并且将是错误的)。

    【讨论】:

    • 我觉得这很有意义!您对这个问题有什么快速的解决方案吗?
    • 从 onClick() 中删除两个块后,您可以在 onResponse() 中编写 if 块代码,在 onErrorResponse() 中编写 else 块代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多