Room Android - float,integer,double,....的数组 - 你可以考虑为它添加一个类型转换器

时间:2017-09-21 22:58:41

标签: android arrays android-room

我刚开始使用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.

有什么问题?

1 个答案:

答案 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;
    }
}

但我不喜欢这个解决方案,这些转换可能会发生错误......如果你有更好的解决方案我会接受它;)