Room Android - Array of float, integer, double,.... - 你可以考虑为它添加一个类型转换器
Room Android - Array of float, integer, double,.... - You can consider adding a type converter for it
我刚从房间开始-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.
请问有什么问题吗?
好的,我的类型转换器有误。
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;
}
}
但我不喜欢这个解决方案,因为这些转换可能会发生错误...如果您有更好的解决方案,我会接受 ;)
我刚从房间开始-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.
请问有什么问题吗?
好的,我的类型转换器有误。
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;
}
}
但我不喜欢这个解决方案,因为这些转换可能会发生错误...如果您有更好的解决方案,我会接受 ;)