GeoPoint нельзя хранить в комнате - PullRequest
0 голосов
/ 24 сентября 2018

Отредактировано: протестировано в соответствии с предложением Назария Мошенского

Я пытался сохранить GeoPoints объект в слое постоянства данных абстракции андроида Комната .Похоже, эта операция не разрешена.

Проект не компилируется со следующей ошибкой:

ошибка: не удается выяснить, как сохранить это поле в базе данных.Вы можете добавить для него конвертер типов.

Есть ли какие-либо решения для достижения этой цели?(совместимый TypeConverter)

PS: я не хочу менять тип объекта класса моей модели на long, long или любой другой тип, так как я использую GeoPoints в своем классе модели для хранения в Firestore и получения на основе параметровмы можем предоставить к запросу против GeoPoints.

1 Ответ

0 голосов
/ 24 сентября 2018

Поскольку решение OPs не работало, я решил реализовать TypeConverter для достижения этой цели.Несмотря на то, что у этого вопроса есть много отрицательных отзывов о том, что этого можно достичь «из коробки», я поделюсь своим решением для тех, кто действительно пытался и не смог этого достичь.

Поэтому я написал класс с именем CustomTypeConverters и аннотировал два методас @TypeConverter.

  1. stringToGeoPoint (String data)

Этот метод будет принимать строку JSON в качестве входного параметра.Затем он создаст объект GeoPoint с использованием библиотеки Gson с представлением GeoPoint.class и вернет его.

geoPointToString (GeoPoint geoPoint)

Этот метод примет объект GeoPoint в качестве входного параметра.Затем он создаст объект JSON String с использованием библиотеки Gson и вернет его.

CustomTypeConverters.java

public class CustomTypeConverters {

    @TypeConverter
    public static GeoPoint stringToGeoPoint(String data) {
        return new Gson().fromJson(data, GeoPoint.class);
    }

    @TypeConverter
    public static String geoPointToString(GeoPoint geoPoint) {
        return new Gson().toJson(geoPoint);
    }

}

Затем нам нужно указать этот преобразователь, используяаннотации внутри объекта GeoPoint, который мы определили в нашем POJO.Предположим, у меня есть класс User с объектом GeoPoint,

@TypeConverters(CustomTypeConverters.class)
private GeoPoint geoPoint;

. Я проверил ответ, просмотрев данные / данные / ваш-пакет-приложений / базы данных на устройстве, на котором выполняется этот код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...