Запрос Firebase, возвращающий ноль, хотя данные там - PullRequest
0 голосов
/ 24 января 2019

Итак, у меня настроен запрос, где он будет искать, где возраст, введенный пользователем, находится в моей базе данных.По какой-то причине, хотя возраст указан в моей базе данных, он все равно будет возвращаться как ноль.

Если я введу 35 в качестве возраста, он все равно выведет «NULL», даже если 35 является одним из возрастов в базе данных.Как это исправить?

enter image description here JSON Файл:

  {
  "data" : [ {
    "age" : 35,
    "agratio" : 0.9,
    "alb" : 3.3,
    "alkphos" : 187,
    "db" : 0.1,
    "diagonsis" : "yes",
    "gender" : 1,
    "sgot" : 18,
    "sgpt" : 16,
    "tb" : 0.7,
    "tp" : 6.8
  }, {
    "age" : 40,
    "agratio" : 0.9,
    "alb" : 3.3,
    "alkphos" : 187,
    "db" : 0.1,
    "diagonsis" : "no",
    "gender" : 1,
    "sgot" : 18,
    "sgpt" : 16,
    "tb" : 0.7,
    "tp" : 6.8
  } ],
  "users" : {
    "234234adfsdsf" : {
      "username" : "hey"
    },
    "BbZZCTIIcJdvCCU9og905kKVvo53" : {
      "email" : "andy55@yahoo.com",
      "username" : "andy"
    }
  }
}

Код:

@IBAction func onDiagnose(_ sender: Any) {
        let ref = Database.database().reference(fromURL: "https://agetest.firebaseio.com/")
        let databaseRef = ref.child("data")
        databaseRef.queryOrdered(byChild: "age").queryEqual(toValue: String(ageTextField.text!)).observeSingleEvent(of: .value, with: { (snapshot) in
            // if there is data in the snapshot reject the registration else allow it

            if (snapshot.value! is NSNull) {


               print("NULL")

            } else {
                print(snapshot.ref.parent?.key!)
                //get parent

            }


        }) { (error) in
            print(error.localizedDescription)
        }

    }

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы сравниваете строку (в своем коде) с числом в базе данных, и они не совпадают. Решение состоит в том, чтобы проанализировать число в вашем коде перед передачей его в queryEqual(toValue: ):

databaseRef
  .queryOrdered(byChild: "age")
  .queryEqual(toValue: Int(ageTextField.text)!)
  .observeSingleEvent(of: .value, with: { (snapshot) in
0 голосов
/ 24 января 2019

По моему опыту работы с базой данных Fiebase Realtime, он не принимает массив объектов, подобный тому, что есть в вашем файле JSON. Мне пришлось форматировать его просто как вложенные объекты без каких-либо массивов. Нечто подобное:

"data" : {
 <someRandomKey1> : {
    "age" : 35,
    "agratio" : 0.9,
    "alb" : 3.3,
    "alkphos" : 187,
    "db" : 0.1,
    "diagonsis" : "yes",
    "gender" : 1,
    "sgot" : 18,
    "sgpt" : 16,
    "tb" : 0.7,
    "tp" : 6.8
  }, 
<someRandomKey2> : {
    "age" : 40,
    "agratio" : 0.9,
    "alb" : 3.3,
    "alkphos" : 187,
    "db" : 0.1,
    "diagonsis" : "no",
    "gender" : 1,
    "sgot" : 18,
    "sgpt" : 16,
    "tb" : 0.7,
    "tp" : 6.8
  } 
},

Чтобы определить, может ли это быть связано с проблемой, с которой вы столкнулись, вы можете зайти в консоль Firebase и просмотреть данные в вашей базе данных реального времени через веб-интерфейс, чтобы убедиться, что это экономит путь. вы ожидаете или нет.

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