React-Native Realm на Android возвращает пустые объекты, отлично работает на iOS - PullRequest
1 голос
/ 08 апреля 2020

У нас есть следующая проблема с нашими реакциями native-native (0.62.0) и realm (5.0.2):

У нас есть схема с несколькими моделями, одна из которых Location. Мы можем вставить в местоположение на обоих устройствах (ios и android), однако, когда мы хотим извлечь объекты из него, он работает только на ios.

 {
      name: 'Location',
      primaryKey: 'uuid',
      properties: {
        uuid: {type: 'string', indexed: true},
        id: {type: 'int'},
        title: 'string?',
        latitude: 'float?',
        longitude: 'float?',
        latitudedelta: 'float?',
        longitudedelta: 'float?',
        radius: 'float?',
      },
    },

. Мы делаем следующее для получить доступ к нашей области:

let repository = new Realm({schema:[{
      name: 'Location',..see above..}]});

export const LocationService = {
  findAll: function(sortBy) {
    let results = repository.objects('Location');
    console.log('LocationService.findAll', results);
    return results;
  },
};

При использовании iOS у нас есть следующий console.log:

LocationService.findAll {"0": {"id": 11, "latitude": 53.160179138183594, "latitudedelta": 0, "longitude": 10.146489143371582, "longitudedelta": 0.08983111381530762, "radius": 35, "title": "", "uuid": "16e1b034-f4b9-44d8-9f58-e30de82dd346"}, "1": {"id": 1, "latitude": 40.732025146484375, "latitudedelta": 0, "longitude": -74.00248718261719, "longitudedelta": 0.08983111381530762, "radius": 35, "title": "", "uuid": "ada51419-eea0-45ef-8209-581ce083a4fc"}, "2": {"id": 2, "latitude": 51.5080680847168, "latitudedelta": 0.2786773443222046, "longitude": -0.13921460509300232, "longitudedelta": 0.08983111381530762, "radius": 35, "title": "", "uuid": "4311470f-d790-4c40-a2b1-f210b723fa08"}, "3": {"id": 12, "latitude": 53.76025390625, "latitudedelta": 0, "longitude": 9.679306983947754, "longitudedelta": 0.08983111381530762, "radius": 35, "title": "", "uuid": "82b40618-051d-49b3-9281-334796e5660c"}}

Где, как на Android, мы получаем следующий console.log:

LocationService.findAll {"0": {}}

Позже в коде у нас есть принудительный доступ к идентификатору, например:

let loadedLocations = LocationService.findAll();
    loadedLocations.forEach(l => {
      console.log(l.id);
    });

Снова, на iOS мы получаем выходные данные console.log с идентификатором, тогда как на android мы видим только неопределенное значение.

При подключении отладчика к реальному устройству и проверке его в консоли, мы также можем увидеть больше на выводе результатов: enter image description here

Интересно, что на других наших моделях в схеме у нас нет этой проблемы на Android. android отлично загружает другие модели. В случае местоположения он видит, что в экземпляре области есть одна запись, и когда мы загружаем файл .realm с устройства (эмулятор && реальное тестирующее устройство), мы видим, что записи сделаны правильно!

В чем может быть проблема, что только на этой модели, только при извлечении объектов и только на android мы сталкиваемся с этой проблемой?

1 Ответ

1 голос
/ 11 апреля 2020

Обновить область до версии 5.0.3
В области есть ошибка js 5.0.2 https://github.com/realm/realm-js/releases/tag/v5.0.3

...