67

エラーのため、部屋に typeConverter を作成できません。私はドキュメントごとにすべてに従っているようです。リストをjson文字列に変換したいと思います。私のエンティティを見てみましょう:

      @Entity(tableName = TABLE_NAME)
public class CountryModel {

    public static final String TABLE_NAME = "Countries";

    @PrimaryKey
    private int idCountry;
/* I WANT TO CONVERT THIS LIST TO A JSON STRING */
    private List<CountryLang> countryLang = null;

    public int getIdCountry() {
        return idCountry;
    }

    public void setIdCountry(int idCountry) {
        this.idCountry = idCountry;
    }

    public String getIsoCode() {
        return isoCode;
    }

    public void setIsoCode(String isoCode) {
        this.isoCode = isoCode;
    }

    public List<CountryLang> getCountryLang() {
        return countryLang;
    }

    public void setCountryLang(List<CountryLang> countryLang) {
        this.countryLang = countryLang;
    }

}

country_langは、文字列 json に変換したいものです。そこで、次のコンバーターを作成しました: Converters.java:

public class Converters {

@TypeConverter
public static String countryLangToJson(List<CountryLang> list) {

    if(list == null)
        return null;

        CountryLang lang = list.get(0);

    return list.isEmpty() ? null : new Gson().toJson(lang);
}}

問題は、 @TypeConverters({Converters.class}) を置く場所です。エラーが発生し続けます。しかし、公式には、これは typeConverter を登録するために注釈を配置した場所です:

@Database(entities = {CountryModel.class}, version = 1 ,exportSchema = false)
@TypeConverters({Converters.class})
public abstract class MYDatabase extends RoomDatabase {
    public abstract CountriesDao countriesDao();
}

私が得るエラーは次のとおりです。

Error:(58, 31) error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
4

14 に答える 14

4

@TypeConverterListはクラスを認識しないためArrayList、代わりに使用する必要があるため、永続化するリストに追加のラッパーは必要ありません。

于 2018-01-12T14:21:27.977 に答える
1

TypeConverterに変換するListこれも作成する必要がありますString

@TypeConverter
public List<CountryLang> toCountryLangList(String countryLangString) {
    if (countryLangString == null) {
        return (null);
    }
    Gson gson = new Gson();
    Type type = new TypeToken<List<CountryLang>>() {}.getType();
    List<CountryLang> countryLangList = gson.fromJson(countryLangString, type);
    return countryLangList;
}

詳細については、私の別の回答を確認することもできます。

于 2018-03-09T11:43:15.677 に答える
0

次のように前後@TypeConverterに整理でき@TypeConvertersます。

public class DateConverter {
    @TypeConverter
    public long from(Date value) {
        return value.getTime();
    }
    @TypeConverter
    public Date to(long value) {
        return new Date(value);
    }
}

そして、それらを次のようにフィールドに適用します。

@TypeConverters(DateConverter.class)
于 2021-11-03T05:23:17.523 に答える