Как сделать GEO Point Class Parcelable или Serializable, так как я хочу передать их с помощью Intent - PullRequest
0 голосов
/ 26 ноября 2018

Я использую Cloud Firestore в качестве своей базы данных, и в каждом документе есть карта с именем restaurant_info, в которой обычно хранятся <"name", "Name of the Restaurant">, <"Location", GEOPoint of the Restaurant>и еще несколько полей.Проблема в том, что класс Geo Point не реализует интерфейс Parcelable или Serializable.

1 Ответ

0 голосов
/ 26 ноября 2018

Есть два способа решения этой проблемы.Первый - добавить в класс Restaurant, который реализует интерфейс Parcelable:

class Restaurant implements Parcelable {}

, а затем переопределить метод writeToParcel() и создать еще один конструктор, подобный этому:

private GeoPoint geoPoint;

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeDouble(geoPoint.getLatitude());
    parcel.writeDouble(geoPoint.getLongitude());
}

public Restaurant(Parcel in) {
    Double lat = in.readDouble();
    Double lng = in.readDouble();
    geoPoint = new GeoPoint(lat, lng);
}

Второй подход заключается в сохранении lat и long в вашем классе Restaurant как двойных примитивов, и каждый раз, когда вам нужен объект GeoPoint, создайте его так:

GeoPoint geoPoint = new GeoPoint(restaurant.getLatitude(), restaurant.getLongitudeE6());
...