为什么我的代码没有按正确的顺序执行?

hl0ma9xz  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(301)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

四年前关门了。
改进这个问题
在下面的代码中,您能解释一下为什么if语句中的块是在调用方法request\u user\u name()之前执行的吗?以下代码的结果如下:
我在if语句中
我在if语句之外
已调用请求\u user \u name()-单击“确定”

chatbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(request_user_name())
            {
                System.out.println("I am inside the if statement");
                Intent intent = new Intent(MainActivity.this, ChatRoom.class); 
                intent.putExtra("room_name", "room"); 
                intent.putExtra("user_name", name);
                startActivity(intent);
            }
            System.out.println("I am outside the if statement");
        }
    });

 private Boolean request_user_name() {

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Enter Name:");
    final EditText input_filed = new EditText(this);
    builder.setView(input_filed);
    final Holder<Boolean> accessChatRoom = new Holder<Boolean>(true); 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            name = input_filed.getText().toString();
            System.out.println("request_user_name() called - OK clicked");
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
            System.out.println("request_user_name() called - Cancel clicked");
            accessChatRoom.setValue(false);
        }
    });
    builder.show();
    return accessChatRoom.getValue();
}
jyztefdp

jyztefdp1#

您的代码正常并按预期工作:当您调用函数时,它准备一个带有“回调”的对话框,然后显示它:

builder.show();

但是代码立即继续(show i不是模态阻塞调用,只是显示),代码转到下一个语句:

return accessChatRoom.getValue()

此时默认设置的值。
代码有正常的行为:这是一个概念问题。
hth公司

bwntbbo3

bwntbbo32#

块中的代码在 request_user_name() 方法调用;如果 request_user_name() 未执行并返回true。i、 例如,只有在满足“if”条件(在您的情况下, request_user_name() ). 尝试从中打印到控制台 request_user_name() 方法以测试执行顺序。我猜你的代码在 request_user_name() 方法。有帮助吗?

相关问题