将等待时间添加到android异步任务

将等待时间添加到android异步任务,android,android-volley,Android,Android Volley,我有一个忘记密码的屏幕。用户填写电子邮件,单击submit并提交HTML请求。它返回字符串“true”或“false”。如果返回true,我将更改屏幕上的文本,等待2秒钟,然后将用户发送到另一个页面。我是这样做的 StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override

我有一个忘记密码的屏幕。用户填写电子邮件,单击submit并提交HTML请求。它返回字符串“true”或“false”。如果返回true,我将更改屏幕上的文本,等待2秒钟,然后将用户发送到另一个页面。我是这样做的

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if ("true".equals(response)) {

                //make one TextView invisible and the other visible.
                findViewById(R.id.pre_password_reset_text).setVisibility(View.INVISIBLE)
                findViewById(R.id.post_password_reset_text).setVisibility(View.VISIBLE);

                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace;
                }
                startActivity(new Intent(ForgotPassword.this, Login.class));  

            } else {
                //show error message
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            //show error message
        }
    });
    requestQueue.add(stringRequest);
StringRequest-StringRequest=new-StringRequest(Request.Method.GET,url,new-Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
如果(“真”。等于(响应)){
//使一个文本视图不可见,另一个可见。
findViewById(R.id.pre\u密码\u重置\u文本).setVisibility(View.INVISIBLE)
findviewbyd(R.id.post\u password\u reset\u text).setVisibility(View.VISIBLE);
试一试{
《睡眠》(2000年);
}捕捉(中断异常e){
e、 打印跟踪;
}
startActivity(新意图(ForgotPassword.this、Login.class));
}否则{
//显示错误消息
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//显示错误消息
}
});
添加(stringRequest);
问题是,线程进入睡眠状态2秒,然后文本发生变化。但是,在我编写的代码中,文本更改首先发生,然后是
Thread.sleep


这里我遗漏了什么?

使用截击,onResponse()代码从主线程调用,因此调用thread.sleep是绝对禁止的,因为它会阻塞UI

如果要延迟对下一个活动的调用,则需要将其延迟到runnable,并且:


一个更干净的方法是在活动/片段中创建一个,并在其上发布runnable,但直接使用密码视图更简单。

线程。在应用程序的主线程中睡眠不是一个好主意。您可以使用Android处理程序来安排将来的任务。处理程序将以异步消息传递方式运行,因此在等待期间不会冻结整个应用程序

handler.postDelayed(new Runnable(){
    @Override
    public void run(){
          // Start your new activity here!
    }
}, 2000);

注意:所有视图及其派生都带有内置处理程序,因此不需要为此定义裸处理程序。

更改textview的可见性,然后等待2秒钟。现在你问为什么延迟后能见度没有改变?谢谢,我的错,我没有意识到这一点。现在我知道了。
handler.postDelayed(new Runnable(){
    @Override
    public void run(){
          // Start your new activity here!
    }
}, 2000);