Android Studio中Java+Room数据库数值查询仅0生效问题求助
问题:Room数据库匹配数值文本时仅0有效,其他值无结果且解析崩溃
问题现象
- 基于Java+Room构建数据库,除主键
id外所有字段设为文本类型,其中aberration_correction字段存储带小数的数值文本 - 用户输入如
"-0.20"这类数值提交后,无法匹配到对应记录;仅输入0时能正常返回结果 - 尝试将
aberration_correction改为Double类型后,完全无法获取任何结果 - 执行数值解析代码时,仅
0能正常运算,其他数值直接触发崩溃:
Double aberration_correctiondou = Double.parseDouble(mPersonList.get(i).getAberration_correction()); Double aberration_correctiondou2 = aberration_correctiondou + 1; myViewHolder.aberration_correction.setText(String.valueOf(aberration_correctiondou2));
相关代码片段
Algorithm.java
public void cnvalgorithm (View view) { EditText sphecornea = findViewById(R.id.sphecornea); String sphecorneastr = sphecornea.getText().toString(); AppExecutors.getInstance().diskIO().execute(() -> { final List<Person> persons = mDb.personDao().loadPersonByAbe(sphecorneastr); runOnUiThread(() -> mAdapter.setTasks(persons)); }); }
PersonDao
@Query("SELECT id,firm,model,aberration_correction FROM PERSON" + " WHERE aberration_correction = :sphecorneastr") public List<Person> loadPersonByAbe(String sphecorneastr);
Person Entity(简化版)
@Entity(tableName = "person") public class Person { @PrimaryKey(autoGenerate = true) int id; public String firm; public String model; public String aberration_correction; @Ignore public Person(String firm, String model, String aberration_correction) { this.firm = firm; this.model = model; this.aberration_correction = aberration_correction; } public Person(int id, String firm, String model, String aberration_correction) { this.id = id; this.firm = firm; this.model = model; this.aberration_correction = aberration_correction; } public Person() {} // Getters and Setters public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirm() { return firm; } public void setFirm(String firm) { this.firm = firm; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getAberration_correction() { return aberration_correction; } public void setAberration_correction(String aberration_correction) { this.aberration_correction = aberration_correction; } }
解决方案
将数据库中aberration_correction列的小数分隔符从逗号改为点即可解决所有问题:
- 文本匹配时,输入的
"-0.20"会和数据库中存储的同格式字符串完全匹配 Double.parseDouble()可以正常解析使用点作为分隔符的数值文本,避免解析崩溃
内容的提问来源于stack exchange,提问作者Alex T
相关产品推荐
相关产品推荐

