我刚开始使用Room-Android。
我尝试坚持我的一个模型,其中一个字段是数组:
float[] values;
我在编译中遇到了这个错误:
Error: Cannot figure out how to save this field into database.
You can consider adding a type converter for it.
我创建了一个类型转换器:
public static class ConverterFloatToString {
@TypeConverter
public String JSONArrayfromFloatArray(Float[] values) {
JSONArray jsonArray = new JSONArray(Arrays.asList(values));
return jsonArray.toString();
}
@TypeConverter
public float[] JSONArrayToFloatArray(String values) {
try {
JSONArray jsonArray = new JSONArray(values);
float[] floatArray = new float[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
floatArray[i] = Float.parseFloat(jsonArray.getString(i));
}
return floatArray;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
我分配到现场:
@TypeConverters(ConverterFloatToString.class)
float[] values;
但我仍然得到同样的错误。
Cannot figure out how to save this field into database.
You can consider adding a type converter for it.
有什么问题?
答案 0 :(得分:0)
好的我在我的类型转换器中犯了一个错误。
JSONArrayfromFloatArray(Float[] values) -> JSONArrayfromFloatArray(float[] values)
我将转换器更改为:
public static class ConverterFloatToString {
@TypeConverter
public static String JSONArrayfromFloatArray(float[] values) {
JSONArray jsonArray = new JSONArray();
for (float value : values) {
try {
jsonArray.put(value);
} catch (JSONException e) {
e.printStackTrace();
}
}
return jsonArray.toString();
}
@TypeConverter
public static float[] JSONArrayToFloatArray(String values) {
try {
JSONArray jsonArray = new JSONArray(values);
float[] floatArray = new float[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
floatArray[i] = Float.parseFloat(jsonArray.getString(i));
}
return floatArray;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
但我不喜欢这个解决方案,这些转换可能会发生错误......如果你有更好的解决方案我会接受它;)