【发布时间】:2019-09-27 16:53:36
【问题描述】:
我一直在制作一个 android 应用程序,我想在其中利用一些以前编写的 Java 代码,这些代码完全编写为使用自己的 main 方法自行运行。
当我从 MainActivity.java 的 onCreate 方法调用 main 方法时,它仍然可以正常调用。但不是与控制台交互,我希望 main() 方法与 Android 的 EditText、按钮和视图交互。 MainActivity 和 Java 代码位于不同的类中。
我想要的基本上是停止程序的执行,直到我在 EditText 中输入我的条目并在我按下按钮时继续执行,然后获取我在 EditText 中输入的字符串。就像在 BufferdReader 中调用 reader.readLine() 方法时一样,执行会停止,直到按下回车键,然后在按下回车键之前接收输入的任何内容。
对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 调用。如果使用缓冲阅读器,代码将停止执行,直到有人输入字符串并按下回车键并输入正确的值(根据用户),然后由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 api 的java example。
请帮忙。
【问题讨论】:
-
你必须 - 好吧 - 暂停执行并等待。没有什么神奇的方法可以停止 JVM(除非你为此使用调试机制)
-
这不是 Android 应用程序开发的工作方式。与大多数现代 UI 工具包一样,Android 的 UI 框架是事件驱动的,可以避免阻塞调用,就像您寻求的那样。
-
我知道做我想做的事情既不传统也不愚蠢,但我需要在很短的时间内在我的应用程序中使用 java 代码的全部功能。所以我想在这里强求。
标签: java android main android-button