**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
四年前关门了。
改进这个问题
在下面的代码中,您能解释一下为什么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();
}
2条答案
按热度按时间jyztefdp1#
您的代码正常并按预期工作:当您调用函数时,它准备一个带有“回调”的对话框,然后显示它:
但是代码立即继续(show i不是模态阻塞调用,只是显示),代码转到下一个语句:
此时默认设置的值。
代码有正常的行为:这是一个概念问题。
hth公司
bwntbbo32#
块中的代码在
request_user_name()
方法调用;如果request_user_name()
未执行并返回true。i、 例如,只有在满足“if”条件(在您的情况下,request_user_name()
). 尝试从中打印到控制台request_user_name()
方法以测试执行顺序。我猜你的代码在request_user_name()
方法。有帮助吗?