将 String 输入转换为 Double 并避免 java.lang.NumberFormatException
Convert String input to Double and avoid java.lang.NumberFormatException
我需要将 String 输入转换为 double,以便在输入超出特定范围时创建 toast 弹出窗口(使用带 < 和 > 运算符的 if 语句)。
编辑:input1 是保存在 room
中的用户输入
我尝试使用此代码将字符串转换为双精度数
Double d = Double.parseDouble(String.valueOf(input1));
但这带来了错误
"Caused by: java.lang.NumberFormatException: For input string: "com.example.mysugartracker.Input1@d89771f""
在这个 class 中,我检索了 input1 并使用输入来填充 recyclerView,这让我相信检索 input1 不是问题,而是将其转换为 double 的方法。 (虽然我只是使用 android studio 的初学者所以我可能是错的)
Tabbed.java(class弹窗显示的地方)
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(保存用户输入的实体 class)
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;
}
}
我用 **
标记了有问题的代码
我需要一种不同的方法来将字符串输入转换为双精度而不导致 java.lang.NumberFormatException 或避免此错误的方法。
我不知道 Input1 上有哪些方法可用,但是您的问题将通过简单地调用给您值的方法来解决。 String.valueOf(input1)
returns 对象的 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;
}
}
我需要将 String 输入转换为 double,以便在输入超出特定范围时创建 toast 弹出窗口(使用带 < 和 > 运算符的 if 语句)。 编辑:input1 是保存在 room
中的用户输入我尝试使用此代码将字符串转换为双精度数
Double d = Double.parseDouble(String.valueOf(input1));
但这带来了错误
"Caused by: java.lang.NumberFormatException: For input string: "com.example.mysugartracker.Input1@d89771f""
在这个 class 中,我检索了 input1 并使用输入来填充 recyclerView,这让我相信检索 input1 不是问题,而是将其转换为 double 的方法。 (虽然我只是使用 android studio 的初学者所以我可能是错的)
Tabbed.java(class弹窗显示的地方)
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(保存用户输入的实体 class)
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;
}
}
我用 **
标记了有问题的代码我需要一种不同的方法来将字符串输入转换为双精度而不导致 java.lang.NumberFormatException 或避免此错误的方法。
我不知道 Input1 上有哪些方法可用,但是您的问题将通过简单地调用给您值的方法来解决。 String.valueOf(input1)
returns 对象的 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;
}
}