如何在JAVA中按下按钮之前暂停整个程序的执行?

时间:2019-05-09 19:35:18

标签: java android main android-button

我一直在开发一个android应用程序,在其中我想利用一些以前编写的Java代码,这些代码完全编写为可以自己使用自己的main方法运行。

当我从MainActivity.java的onCreate方法调用main方法时,它仍然可以正常运行。但是,我不希望与控制台连接,而是要main()方法与EditText,Button和android的视图进行交互。 MainActivity和Java代码在单独的类中

我想要的基本上是停止执行程序,直到我在EditText中输入条目,然后在按下按钮然后取入我在EditText中输入的字符串时恢复执行。就像在BufferdReader中,当我们调用reader.readLine()方法时,执行会一直停止,直到按enter键,然后接受在按enter键之前输入的所有内容。

promptString()进行三个函数调用:

            case TdApi.AuthorizationStateWaitPhoneNumber.CONSTRUCTOR: {
                String phoneNumber = promptString("Please enter phone number: ");
                client.send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, false, false), new AuthorizationRequestHandler());
                break;
            }
            case TdApi.AuthorizationStateWaitCode.CONSTRUCTOR: {
                String code = promptString("Please enter authentication code: ");
                client.send(new TdApi.CheckAuthenticationCode(code, "", ""), new AuthorizationRequestHandler());
                break;
            }
            case TdApi.AuthorizationStateWaitPassword.CONSTRUCTOR: {
                String password = promptString("Please enter password: ");
                client.send(new TdApi.CheckAuthenticationPassword(password), new AuthorizationRequestHandler());
                break;
            }

每个调用都返回一个字符串,然后将其发送给API调用。如果使用缓冲读取器,则代码将停止执​​行,直到有人输入字符串并按Enter,然后输入正确的值(根据用户),然后由promptString()返回,然后发送给API调用。

我想在android中复制此缓冲的读取器类型的功能,当调用promptString()时,程序将等到用户输入编辑文本并按下按钮后promptString()返回字符串然后继续执行。

现在发生的事情是执行继续进行,而没有给用户输入编辑文本的机会,因此错误(空字符串)值被发送到API调用,从而导致错误。

promptString()代码,负责获取输入并返回输入的字符串(未修改):

private static String promptString(String prompt) {
        System.out.print(prompt);
        currentPrompt = prompt;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        try {
            str = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        currentPrompt = null;
        return str;
    }

我知道我的要求非常传统和愚蠢,但是我需要这样做,因为我面临一些截止日期,而且我没有时间完全理解API调用。

如果您不清楚该问题,请评论您要详细说明的部分。

我愿意接受不完全属于我的解决方案,但会完成我所寻找的工作,并帮助我让程序等到用户在编辑文本中输入字符串为止。

我正在使用the telegram apijava example

请帮助。

1 个答案:

答案 0 :(得分:0)

Android是事件驱动的,您可以将promptString的行为替换为以下内容:当然,promptString必须具有Android上下文,在Activity中具有抵抗力或可以访问Activity上下文

private void promptString(String prompt, callback) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(prompt);

    // Set up the input
    final EditText input = new EditText(this);
    // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
    input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    builder.setView(input);

    // Set up the buttons
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            callback.setValue(input.getText().toString());
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    builder.show();
}

您可以按原样使用Java代码,但是您必须修改一些代码并调出Android请求输入,同时移交一个回调处理程序,当输入完成后,该回调处理程序将回调/发送回输入使用价值。

看一下Java代码中的onAuthorizationStateUpdated()方法,每个switch情况都必须调用此方法并提供与此相同的回调。 因此,每个切换用例都有其自己的回调,也可以使用相同的回调,您可以通过AlertDialog的响应再次切换用例,当然,您需要为此使用一些标识符,也许更容易使用其他回调处理程序

    case TdApi.AuthorizationStateWaitPhoneNumber.CONSTRUCTOR: {
                    String phoneNumber = yourAndroidContextActivity.promptString 
   ("Please enter phone number: ", callback);
                    break;
                }

代码:

 client.send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, false, false), new AuthorizationRequestHandler());

必须进入回调,您希望它能对您有所帮助