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

我尝试使用此代码将String转换为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;
    }

}


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

我需要一种不同的方式将String输入转换为double而不导致java.lang.NumberFormatException或避免这种错误的方式。

最佳答案

我不知道Input1上可用的方法,但是您的问题将通过简单地调用为您提供值的方法来解决。 String.valueOf(input1)返回对象的String表示形式,这意味着它仅调用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;
    }
}

10-08 13:09