我正在尝试创建一个小应用程序,它在EditText数字中输入并从数组中获取相应的值并在TextView中显示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText e = (EditText) findViewById(R.id.editText1);
final TextView t = (TextView) findViewById(R.id.textView1);
Button b = (Button) findViewById(R.id.button1);
Resources res = this.getResources();
String arr[] = getResources().getStringArray(R.array.example);
final Editable input = e.getText();
final String in2 = input.toString();
int number = Integer.parseInt(in2);
if(number < 0){
t.setText("Input is too small");
} else if (number > 666){
t.setText("Input is too large");
} else {
final String out = arr[number].toString();
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
t.setText(in2);
}
});
}
}
我想要它,如果输入为0并且单击按钮,则TextView为A.
<string-array name="example">
<item >A</item>
<item >B</item>
<item >C</item>
<item >D</item>
</string-array>
不幸的是,无论何时我在模拟器或手机上启动它都会立即崩溃。有谁知道我做错了什么?
答案 0 :(得分:1)
问题在于,当您启动应用时,editText
为空。
因此in2
等于""
,因此您无法将此值解析为整数。
将其移动到onClick方法中:
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int number = Integer.parseInt(e.getText().toString());
if(number < 0){
t.setText("Input is too small");
} else if (number >= arr.length){
t.setText("Input is too large");
} else {
t.setText(arr[number]);
}
});
}
答案 1 :(得分:0)
好的只是通过查看代码,我认为它不会实现您想要实现的目标!
final Editable input = e.getText();
final String in2 = input.toString();
int number = Integer.parseInt(in2);
这在onCreate方法中发生。因此,当应用程序运行时,它会立即尝试提取一些文本,但没有提取任何内容,因此Integer.parseInt(in2)将抛出运行时异常。
这是我建议的工作流程,可能需要重新编写代码。
在onCreate方法中:
通过findViewById
获取所需的所有对象。
将侦听器设置为editText字段和按钮 - editText的侦听器负责跟踪用户键入的任何更改。在侦听器给出的方法中,包括以下代码:
stringFromEditText = editText.getText().toString();
当然,您应该早些时候宣布这些工作:
String stringFromEditText;
EditText editText;
之后,您可以调用updateTextView()
方法(您自己定义)。
你甚至不需要一个按钮!一切都在听众的方法中完成(例如onTextChanged
)
在updateTextView()
方法中,不要忘记处理错误输入或空输入的一些逻辑:当遇到错误输入时,只需将stringFromEditText的值设置为“0”即可。因此,您将在以后成功解析它 - &gt;没有更多的崩溃!
我知道通过提供所有代码我没有太详细。但我希望这会有所帮助。