2017-01-03 3 views
-3

В приведенном ниже коде вы можете объяснить мне, почему блок внутри оператора if выполняется до вызова метода request_user_name()? Результат ниже кода заключается в следующем:Почему мой код не выполнен в правильном порядке?

Я внутри если заявление

Я вне если заявление

request_user_name() называется - OK щелкнул

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(); 
} 
+5

Что такое 'request_user_name'? – Moira

+0

Отправьте весь код –

+0

request_user_name() Возвращает «true». Отправьте код метода. –

ответ

0

В код в блоке не выполняется до вызова метода request_user_name(); код в блоке не будет выполняться вообще, если request_user_name() не выполнил и не вернул true. I.E., распечатка в кодовом блоке выполняется только после выполнения условия «if» (в вашем случае request_user_name()). Попробуйте распечатать на консоли с помощью метода request_user_name(), чтобы проверить порядок выполнения. Я предполагаю, что ваш код не является потокобезопасным внутри метода request_user_name(). Это помогает?

+0

Извините, но я пока не понимаю. request_user_name() возвращает true или false в зависимости от ситуации. Короче говоря, этот метод создает AlertDialog. Пользователь вводит свое имя и нажимает «ОК» или может нажать «Отмена». Если щелкнуть Ok, метод вернет true, иначе он вернет false. – Zimo

+0

В случае, если он возвращает false, выполняет ли блок кода? – cjbrog

+0

В обоих случаях (true или false) request_user_name() выполняется после области завершения инструкции if.Вы можете проверить свой код, если хотите, и поместить некоторые println() для двойной проверки. – Zimo

1

Ваш код нормально и работает, как ожидалось: при вызове функции, она готовит диалог с его «обратных вызовов», затем отобразить его:

builder.show(); 

но код продолжить сразу (шоу я не блокирующий вызов модальный, просто дисплей) и код переходят к следующему утверждению:

return accessChatRoom.getValue() 

значение, которое в это время, как установлено по умолчанию.

Код имеет нормальное поведение: проблема с концепцией.

HTH

Смежные вопросы