【问题标题】:Android Studio Java converting values app keeps crashingAndroid Studio Java转换值应用程序不断崩溃
【发布时间】:2020-10-06 07:41:00
【问题描述】:

我正在尝试制作一个小型应用程序,它接受编辑文本的输入并将给定的单位转换为另一个单位,例如度数到 gon。

我有一个问题,因为当我输入一个值然后单击“转换”按钮时,我的应用程序不断崩溃。

任何可能导致崩溃的帮助?

主要活动:

package com.example.winkelmammadov;

import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

static EditText et_Grad, et_Rad, et_Gon;
Button btn_reset, btn_umrechnen;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setupUI();
    reset();
    buttonrechnen();
}


public void setupUI() {
    et_Grad = findViewById(R.id.et_Grad);
    et_Rad = findViewById(R.id.et_Rad);
    et_Gon = findViewById(R.id.et_Gon);
    btn_reset = findViewById(R.id.btn_reset);
    btn_umrechnen = findViewById(R.id.btn_umrechnen);
}

public void reset() {
    btn_reset.setOnClickListener(new 
View.OnClickListener() {
        @Override
        public void onClick(View v) {
            et_Grad.setText("");
            et_Rad.setText("");
            et_Gon.setText("");
        }
    });
}

public void buttonrechnen() {
    btn_umrechnen.setOnClickListener(new 
View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Winkel.umrechnen();
        }
    });
}


}

和我的转换类:

package com.example.winkelmammadov;

public class Winkel extends MainActivity {

public static void umrechnen() {

        String gon = et_Gon.getText().toString();
        String grad = et_Grad.getText().toString();
        String rad = et_Grad.getText().toString();

        et_Gon.setText(String.valueOf(Double.parseDouble(grad) * 200 / 180));
        et_Gon.setText(String.valueOf(Double.parseDouble(rad) * 200 / Math.PI));

        et_Rad.setText(String.valueOf(Double.parseDouble(gon) * Math.PI / 200));
        et_Rad.setText(String.valueOf(Double.parseDouble(grad) * Math.PI / 180));

        et_Grad.setText(String.valueOf(Double.parseDouble(gon) * 180 / 200));
        et_Grad.setText(String.valueOf(Double.parseDouble(rad) * 180 / Math.PI));

    }
  }

编辑:调试器日志

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.winkelmammadov, PID: 11266
java.lang.NumberFormatException: empty String
    at 
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at com.example.winkelmammadov.Winkel.umrechnen(Winkel.java:26)
    at 
com.example.winkelmammadov.MainActivity$2.onClick(MainActivity.java:48)
    at android.view.View.performClick(View.java:7448)
    at android.view.View.performClickInternal(View.java:7425)
    at android.view.View.access$3600(View.java:810)
    at android.view.View$PerformClick.run(View.java:28305)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
  Disconnected from the target VM, address: 'localhost:8601', transport: 
  'socket'

【问题讨论】:

  • 发布堆栈跟踪,所以我们可以看到错误
  • 错误日志请..
  • 如果那是你想要的,我会从调试器中输入错误日志。

标签: java android android-studio crash


【解决方案1】:

使用TextUtils.isEmpty(String s) 来检查gongradrad 在尝试将其解析为Double 之前是否有一些价值

【讨论】:

    【解决方案2】:

    您应该在解析双精度之前检查您的字段:

    private void someMethod(String str) {
       double AText = ParseDouble(angleAField.getText());
       double BText = ParseDouble(angleBField.getText());
       
       // other code here same
    }
    
    double validateParsing(String strNumber) {
     if (strNumber != null && strNumber.length() > 0) {
       try {
          return Double.parseDouble(strNumber);
       } catch(Exception e) {
          return -1;   // or some value to mark this field is wrong. or make a function validates field first ...
        }
    }
     else return 0;
    }
    

    或者您可以简单地使用:TextUtils.isEmpty(String s),如果字符串为空或长度为 0,则返回 true。

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 1970-01-01
      • 2013-03-26
      • 2017-10-13
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多