Возвращаемое значение Android из диалогового окна

Я создаю приложение для Android. В этом фрагменте я пытаюсь вызвать метод verifyKey, который открывает диалоговое окно для ввода ключа, чтобы можно было подтвердить его правильность и разрешить отправку сообщения.

К сожалению, программа не возвращается и не запускается с того места, где был вызван метод verifyKey. После закрытия диалогового окна я не могу найти, где находится программа в коде, поскольку Log.d("After verifyInvalid key", "!!!!!!!!!!!!!!!!!"); не запущен. Я попытался вернуть логическое значение из onClick в verifyKey, но это не позволяет ему из внутреннего класса. Я также получаю E/ViewRootImpl: sendUserActionEvent() mView == null.

Есть ли простой способ вернуть это диалоговое окно или как обеспечить возврат кода при запуске из того места, где было вызвано диалоговое окно.

this.testContact = new Contacts("testCon", "08xxxxxxx", "testkey", true);
    // assign on click listener to button
    send_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //to send a message first an encryption key must be established
            if (testContact.getKeySet()) {
                verifyKey();
                if (keyChecker(verifyEnteredKey)) {
                    Log.d("Valid key", "!!!!!!!!!!!!!!!!!");
                    sendSms(testContact);
                } else {
                    Toast.makeText(getBaseContext(), "Invalid  Key",
                            Toast.LENGTH_LONG).show();
                }
                Log.d("After verifyInvalid key", "!!!!!!!!!!!!!!!!!");

                Log.d("OUTSDIDE KEY CEHCK", "outside");
            }
        }//on click
    });
 public boolean keyChecker(String entKey) {
    if (entKey.equals(testContact.getKey())) {
        Log.d("Valid key", "key confirmed");
        return true;
    }
    Log.d("inValid key", "key un-confirmed");
    return false;
}

public void verifyKey() {
    verifyEnteredKey = "";
    Builder builder = new Builder(SendMessage.this);
    builder.setTitle("Cloaked Key");
    // I'm using fragment here so I'm using getView() to provide ViewGroup
    // but you can provide here any other instance of ViewGroup from your Fragment / Activity
    View viewInflated = LayoutInflater.from(SendMessage.this).inflate(R.layout.key_entry_dialog, (ViewGroup) findViewById(android.R.id.content), false);
    // Set up the input
    final EditText input = viewInflated.findViewById(R.id.input);
    // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
    builder.setView(viewInflated);

    // Set up the buttons
    builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            verifyEnteredKey = input.getText().toString();
            Log.d("ENTERED KEYY in dialog", verifyEnteredKey);
            // if (verifyEnteredKey.equals(testContact.getKey())){
            //    return true;
            // }
            // keyChecker(verifyEnteredKey);
            Log.d("Before dialog dismiss", verifyEnteredKey);
            dialog.dismiss();
            Log.d("afteer dialog dismiss", verifyEnteredKey);

        }

    });
    builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    Log.d("Before builder show", verifyEnteredKey);
    builder.show();
    Log.d("After builder show", verifyEnteredKey);


}

Вы не можете вернуться из метода внутри анонимного класса. В этом случае вы должны либо взять поток дальше от метода внутреннего класса. Вы можете вызвать метод из внутреннего класса или использовать обратный вызов. См. Как определить обратные вызовы.

ADM 27.03.2018 20:27

Спасибо, что сработали, вызвав keyChecker(verifyEnteredKey); из диалога, а затем sendSms (testContact); из метода keyChecker. Моя единственная проблема заключается в том, что я хотел бы повторно использовать этот метод (чтобы ввести ключ для отправки и ввести ключ для просмотра сообщения), и этот способ не позволяет мне это сделать.

MidnightP 27.03.2018 20:46

Для повторного использования кода вы должны следовать шаблонам проектирования. Или вы можете просто начать с создания класса Utility с универсальным объектом. Покопавшись в этом, вы получите концепцию. Удачи.

ADM 27.03.2018 20:49

Отлично, спасибо, очень помогли.

MidnightP 27.03.2018 21:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
556
1

Ответы 1

переместите этот блок кода в onDismissListenerhttps://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html

if (keyChecker(verifyEnteredKey)) {
                Log.d("Valid key", "!!!!!!!!!!!!!!!!!");
                sendSms(testContact);
            } else {
                Toast.makeText(getBaseContext(), "Invalid  Key",
                        Toast.LENGTH_LONG).show();
    }

по сути, вы пытаетесь прочитать verifyEnteredKey до того, как значение будет присвоено в обратном вызове

Другие вопросы по теме