有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

实现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) 个答案

  1. # 1 楼答案

    NumberFormatException: For input string: ""-你的String是空的(在EditText中没有文本),所以它不能被解析,它不是一个数字

    检查String value是否为null或空,如下所示

    String value = inputuser.getText().toString();
    if(value==null || value.length()==0) return;
    

    还是更普遍的方式

    String value;
    int inputUser;
    try{
        value= inputuser.getText().toString();
        inputUser = Integer.parseInt(value);
    } catch(Exception ignored){
        return;
    }