实现setOnKeyListener的java问题
我有一些安卓开发人员的家庭作业,我正在尝试添加一个setOnKeyListener,当我按下键盘上的enter键时,可以计算和转换一些数字。我已经制作了按钮监听器,它工作得很顺利,但是按键监听器没有。下面是代码
inputuser.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
final int spinnerPosition = mySpinner.getSelectedItemPosition();
calculo(spinnerPosition);
return false;
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int spinnerPosition = mySpinner.getSelectedItemPosition();
calculo(spinnerPosition);
}
});
两个侦听器都调用一个名为“calculo”的方法,该方法使数字和设置文本视图可见,并将计算结果传递给文本
public void calculo(int spinnerPosition){
String value= inputuser.getText().toString();
int inputUser = Integer.parseInt(value);
double operacion = 0;
if (spinnerPosition == 0){
operacion = inputUser * valoresDeConversion[0];
String result = String.valueOf(operacion);
resultado.setVisibility(View.VISIBLE);
resultado.setText(result);
}else if (spinnerPosition == 1){
operacion = inputUser * valoresDeConversion[1];
String result = String.valueOf(operacion);
resultado.setText(result);
resultado.setVisibility(View.VISIBLE);
}else if (spinnerPosition == 2){
operacion = inputUser * valoresDeConversion[2];
String result = String.valueOf(operacion);
resultado.setText(result);
resultado.setVisibility(View.VISIBLE);
}else if (spinnerPosition == 3){
operacion = inputUser / valoresDeConversion[0];
String result = String.valueOf(operacion);
resultado.setText(result);
resultado.setVisibility(View.VISIBLE);
}else if (spinnerPosition == 4){
operacion = inputUser / valoresDeConversion[1];
String result = String.valueOf(operacion);
resultado.setText(result);
resultado.setVisibility(View.VISIBLE);
}else if (spinnerPosition == 5){
operacion = inputUser / valoresDeConversion[2];
String result = String.valueOf(operacion);
resultado.setText(result);
resultado.setVisibility(View.VISIBLE);
}
}
这是我的XML代码
<EditText
安卓:id="@+id/input"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:hint="@string/valor"
安卓:layout_marginTop="70dp"
安卓:inputType="number"
/>
<Spinner
安卓:id="@+id/spinner"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_centerInParent="true"
tools:ignore="MissingConstraints"
安卓:entries="@array/valor"/>
<Button
安卓:id="@+id/button"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:text="@string/button"
安卓:layout_centerHorizontal="true"
安卓:layout_below="@id/spinner"
安卓:layout_marginTop="20dp"/>
<TextView
安卓:id="@+id/resultado"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_alignParentBottom="@+id/button"
安卓:layout_centerHorizontal="true"
安卓:layout_marginTop="500dp"
安卓:textSize="20sp"
安卓:visibility="invisible"
/>
当我在编辑文本中输入一个值,或者当我按下按钮,但我不知道问题出在哪里时,应用程序就会中断
(编辑)
这是Logcat的信息
FATAL EXCEPTION: main
Process: myapplication2, PID: 3883
java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:627)
at java.lang.Integer.parseInt(Integer.java:650)
at MainActivity.calculo(MainActivity.java:85)
at MainActivity$1.onKey(MainActivity.java:61)
at 安卓.view.View.dispatchKeyEvent(View.java:13348)
at 安卓.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1922)
at 安卓.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1922)
at 安卓.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1922)
at 安卓.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1922)
at 安卓.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1922)
at 安卓.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1922)
at com.安卓.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:453)
at com.安卓.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1839)
at 安卓.app.Activity.dispatchKeyEvent(Activity.java:3953)
at 安卓x.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:122)
at 安卓x.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:84)
at 安卓x.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:140)
at 安卓x.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:569)
at 安卓x.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
at 安卓x.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3054)
at com.安卓.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:367)
at 安卓.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5413)
at 安卓.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5281)
at 安卓.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4788)
at 安卓.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4841)
at 安卓.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4807)
at 安卓.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4947)
at 安卓.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4815)
at 安卓.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5004)
at 安卓.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4788)
at 安卓.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4841)
at 安卓.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4807)
at 安卓.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4815)
at 安卓.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4788)
at 安卓.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7505)
at 安卓.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7474)
at 安卓.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7435)
at 安卓.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:4561)
at 安卓.os.Handler.dispatchMessage(Handler.java:107)
at 安卓.os.Looper.loop(Looper.java:214)
at 安卓.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:930)
# 1 楼答案
NumberFormatException: For input string: ""
-你的String
是空的(在EditText
中没有文本),所以它不能被解析,它不是一个数字检查
String value
是否为null
或空,如下所示还是更普遍的方式