如何暂停整个程序的执行,直到在 JAVA 中按下按钮?
How to pause the execution of the entire program until a button is pressed in JAVA?
我一直在制作一个 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;
}
每次调用 return 都是一个字符串,然后为 API 调用发送该字符串。如果使用缓冲 reader 代码将停止执行,直到有人输入字符串并按回车键并输入正确的值(根据用户),然后由 promptString()
编辑 return 然后已发送至 API 个电话。
我想在 android 中复制这个缓冲的 reader 类型的功能,当 promptString()
被调用时,程序会一直等到用户输入编辑文本并且按下按钮时然后按下 promptString()
return 字符串,然后继续执行。
现在正在发生的事情是,执行过程没有让用户有机会输入编辑文本,因此错误的(空字符串)值被发送到 API 调用,从而导致错误。
promptString()
负责获取输入并return输入字符串的代码(未修改):
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's java example。
请帮忙。
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 请求输入,同时移交一个回调处理程序,当输入完成后,将 callback/send 返回要使用的输入值。
查看 java 代码中的 onAuthorizationStateUpdated()
方法,每个 switch case 都必须调用此方法并在同一位置提供回调。
所以每个 switch case 都有自己的回调,或者它们可以使用相同的回调,你可以通过 AlertDialog
的响应再次切换 case,当然你需要一些标识符,使用不同的回调处理程序可能更容易
case TdApi.AuthorizationStateWaitPhoneNumber.CONSTRUCTOR: {
String phoneNumber = yourAndroidContextActivity.promptString
("Please enter phone number: ", callback);
break;
}
代码:
client.send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, false, false), new AuthorizationRequestHandler());
必须进入回调,你去吧希望它有帮助
我一直在制作一个 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;
}
每次调用 return 都是一个字符串,然后为 API 调用发送该字符串。如果使用缓冲 reader 代码将停止执行,直到有人输入字符串并按回车键并输入正确的值(根据用户),然后由 promptString()
编辑 return 然后已发送至 API 个电话。
我想在 android 中复制这个缓冲的 reader 类型的功能,当 promptString()
被调用时,程序会一直等到用户输入编辑文本并且按下按钮时然后按下 promptString()
return 字符串,然后继续执行。
现在正在发生的事情是,执行过程没有让用户有机会输入编辑文本,因此错误的(空字符串)值被发送到 API 调用,从而导致错误。
promptString()
负责获取输入并return输入字符串的代码(未修改):
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's java example。
请帮忙。
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 请求输入,同时移交一个回调处理程序,当输入完成后,将 callback/send 返回要使用的输入值。
查看 java 代码中的 onAuthorizationStateUpdated()
方法,每个 switch case 都必须调用此方法并在同一位置提供回调。
所以每个 switch case 都有自己的回调,或者它们可以使用相同的回调,你可以通过 AlertDialog
的响应再次切换 case,当然你需要一些标识符,使用不同的回调处理程序可能更容易
case TdApi.AuthorizationStateWaitPhoneNumber.CONSTRUCTOR: {
String phoneNumber = yourAndroidContextActivity.promptString
("Please enter phone number: ", callback);
break;
}
代码:
client.send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, false, false), new AuthorizationRequestHandler());
必须进入回调,你去吧希望它有帮助