java - 将 String 输入转换为 Double 并避免 java.lang.NumberFormatException

标签 java string android-studio double numberformatexception

我需要将字符串输入转换为 double 型,以便在输入超出特定范围时创建一个 Toast 弹出窗口(使用带有 < 和 > 运算符的 if 语句)。 编辑:input1是保存在房间中的用户输入

我尝试使用此代码将字符串转换为 double Double d = Double.parseDouble(String.valueOf(input1)); 但这会出现错误 “由以下原因引起:java.lang.NumberFormatException:对于输入字符串:“com.example.mysugartracker.Input1@d89771f”” 在这个类中,我检索 input1 并使用输入来填充 recyclerView,这使我相信检索 input1 不是问题,而是将其转换为 double 的方法。 (虽然我只是使用 android studio 的初学者,所以我可能是错的)

Tabbed.java(显示弹出窗口的类)

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mInputViewModel = ViewModelProviders.of(this).get(InputViewModel.class);
        if (requestCode == INPUT_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
            Input1 input1 = new Input1(data.getStringExtra(input.EXTRA_REPLY));
            mInputViewModel.insert(input1);
            ** Double d = Double.parseDouble(String.valueOf(input1)); **
            //display pop-up if blood is above target
            if (d > 8.0) {
                Toast.makeText(
                        getApplicationContext(),
                        R.string.PopupHigh,
                        Toast.LENGTH_LONG).show();
            }
            //display pop-up if blood is below target
            if (d < 4.0) {
                Toast.makeText(
                        getApplicationContext(),
                        R.string.PopupLow,
                        Toast.LENGTH_LONG).show();
            }
            } else {
                Toast.makeText(
                        getApplicationContext(),
                        R.string.empty_not_saved,
                        Toast.LENGTH_LONG).show();
                }
        }
    public static final int INPUT_ACTIVITY_REQUEST_CODE = 1;

input1.java(保存用户输入的实体类)

public class Input1 {
    @PrimaryKey(autoGenerate = true)
    private int id;
    @NonNull
    @ColumnInfo(name = "input1")
    private String mInput1;

    Input1(@NotNull String input1) {this.mInput1 = input1;}
    public String getInput1() {return this.mInput1;}

    //getter for id
    public int getId() {
        return id;
    }
    //setter for id
    public void setId(int id) {
        this.id = id;
    }

}

我已用 ** 标记有问题的代码

我需要一种不同的方法将字符串输入转换为 double 值,而不会导致 java.lang.NumberFormatException 或避免此错误的方法。

最佳答案

我不知道 Input1 上有哪些方法可用,但只需调用为您提供值的方法即可解决您的问题。 String.valueOf(input1) 返回对象的字符串表示形式,这意味着它只是调用 toString() 方法,在您的情况下,Input1 不会覆盖 toString 因此它是正在调用的Object.toString()

将其更改为如下所示:

Double d = Double.parseDouble(input1.getValue());

或者,实现Input1.toString():

已更新,并根据评论提供了解决方案:

public class Input1 {
    @PrimaryKey(autoGenerate = true)
    private int id;
    @NonNull
    @ColumnInfo(name = "input1")
    private String mInput1;

    Input1(@NotNull String input1) {this.mInput1 = input1;}
    public String getInput1() {return this.mInput1;}

    //getter for id
    public int getId() {
        return id;
    }

    //setter for id
    public void setId(int id) {
        this.id = id;
    }

    // Just add this method to you Input1 class
    @Override
    public String toString() {

        return mInput1;
    }
}

关于java - 将 String 输入转换为 Double 并避免 java.lang.NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57763161/

相关文章:

android - 如何为 Jackson JSON 处理器设置 PROGUARD?

java - 为什么我的条件从来没有满足过?

chdir(..) 成功返回 0 并更改目录,但输出 "No such file or directory"

c++ - 用于字符串匹配算法的大 O 表示法

c# - 如何检查一个字符串是否至少有 1 个字母字符?

android - 如何在 gradle 中获取当前选择的构建变体?

android - 将所有子文件夹定义为源文件夹

java - 累积 getClickCount()

java - 在 Javax.package 或替代方案中等效的 Hibernate @NotEmpty 注解

java - 从导出的 Jar 执行时未找到 jdbc 驱动程序