2017-09-21 15 views
0

私はちょうどRoom-Androidから始まります。Room Android - 浮動小数点型、整数型、倍精度型、...の配列。

私はフィールドの1が配列である私のモデルの一つ存続してみてください:

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

私のタイプコンバータで間違いを犯しました。

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

しかし、私は、あなたがよりよい解決策を持っている場合、私はそれを取る...エラーが発生する可能性があり、これらの変換と、このソリューションのファン、ないんだけど;)

関連する問題