Как точно знать свойство, которое не смогло преобразовать его значение при извлечении данных из базы данных Firebase - PullRequest
0 голосов
/ 28 августа 2018

Могу ли я узнать, что именно свойству не удалось преобразовать значение при следующем исключении базы данных? Очень трудно поймать свойство, когда вы имеете дело с большим узлом с вложенными другими узлами!

W / System.err: com.google.firebase.database.DatabaseException: Не удалось преобразовать значение типа java.lang.String в double

Исключение произошло в строке 29

"delivery_fees": "9"

Структура базы данных следующего фрагмента, в которой возникает ошибка

{
  ...
  "delivering_due_date": "09-08-2018 14:32:55",
  "delivery_day": "Tuesday",
  "delivery_end_time": "2018-05-29 14:12:11",
  "delivery_fees": "9",
  "delivery_payment_type": "Use Cash",
  "delivery_start_time": "2018-05-29 12:12:11",
  ...
}

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Если вы хотите убедиться, что у вас есть требуемый тип для поля, установите правила для базы данных Firebase, чтобы ограничить поле одним типом. В вашем случае происходит то, что вы ожидаете целое / длинное значение из базы данных, но оно записывается как строка в базу данных.

Попытка поймать ожидания на стороне клиента не идеальна. Идеальное решение - ограничить данные, которые может принимать поле.

Вот вступление к правилам: https://firebase.google.com/docs/database/security/

Вот простой инструмент команды Firebase, чтобы легко писать правила. https://github.com/firebase/bolt

Это может выглядеть как длинное решение, но это способ записи, позволяющий клиентской стороне не угадать, какой будет тип поля.

0 голосов
/ 28 августа 2018

Вы получаете следующую строку кода:

W/System.err: com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to double

Поскольку ваше свойство delivery_fees, как я вижу в вашей схеме базы данных, имеет тип String, а не тип double. Поэтому, когда вы пытаетесь получить его значение как double, вы получаете эту ошибку, говорящую о том, что она не может быть преобразована, что на самом деле верно, потому что вы не можете просто преобразовать в Java объект String в double.

Есть два способа, которыми вы можете решить это. Первый - получить значение свойства delivery_fees в виде String, а затем преобразовать его в double. Вторым было бы изменить тип свойства на удвоенное значение "delivery_fees": "9" -> "delivery_fees": 9.01 и оставить метод получения без изменений. Второй подход - это то, что я тоже рекомендую, потому что свойства должны содержать значения соответствующего типа данных. Таким образом, вы можете воспользоваться функциями, которые предоставляют номера.

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