данные чтения firebase kotlin - PullRequest
0 голосов
/ 12 июля 2020

Я новичок в kotlin. И только я его учу. Если вы можете мне помочь. У меня снова есть вопросы по поводу firebase. У меня такая структура:

{
  "BarcodeBase" : {
    "Pepsi" : {
      "Pepsi Black" : {
        "barcode" : "4820036487899",
        "namebar" : "Pepsi Black"
      },
      "Pepsi Chery" : {
        "barcode" : "4820036487789",
        "namebar" : "Pepsi Chery"
      }
    }
  },
  "users" : {
    "4WZ8sYdLfNeNTDH7t0JZXKbNdmF2" : {
      "company" : "Pepsi",
      "email" : "test@gmail.com",
      "id" : "4WZ8sYdLfNeNTDH7t0JZXKbNdmF2"
    }
  }
}

Мне нужно вывести панель имен и штрих-код. Я пишу в базу данных так:

private fun addbarcode() {
    val name = etname.text.toString()
    val barcode = etNumber.text.toString()
    if (TextUtils.isEmpty(name)) { Toast.makeText(applicationContext, "Please enter name...", Toast.LENGTH_LONG).show()
        return }
    if (TextUtils.isEmpty(barcode)) { Toast.makeText(applicationContext, "Please enter barcode!", Toast.LENGTH_LONG).show()
        return }
    val dataMap = mutableMapOf<String, Any>()
    dataMap[CHILD_NAMEBARCODE] = name
    dataMap[CHILD_BARCODE] = barcode
    REF_DATABASE_ROOT.child(NODE_BARCODE).child(USER.company).child(name)
        .updateChildren(dataMap).addOnCompleteListener { task2 ->
            if (task2.isSuccessful) Toast.makeText(Iconics.applicationContext, "Successful!", Toast.LENGTH_LONG).show()
        }
    return }

Какой ребенок мне нужно использовать в других действиях после (USER.company)?

Извините за мой плохой английский sh (

-------------------- ОБНОВЛЕНИЕ

inline fun initBarcode(crossinline function: () -> Unit) {
    REF_DATABASE_ROOT.child(NODE_BARCODE).child(USER.company).child(I do not know what can be used here)
        .addListenerForSingleValueEvent(AppValueEventListener {
            BARCODE = it.getValue(BarcodeDBModel::class.java) ?: BarcodeDBModel()
            if (BARCODE.namebar.isEmpty()){ BARCODE.namebar = "Ошибка" }
            function()
        })
}

Вот мой выходной код. Но он не работает так, как мне нужно. Мне нужно изменить его, чтобы он работал. Но я не знаю, как это сделать.

1 Ответ

0 голосов
/ 12 июля 2020

Если вы знаете ключ дочернего элемента для чтения (например, Pepsi Black или Pepsi Cherry), вы можете передать его дочернему методу:

REF_DATABASE_ROOT.child(NODE_BARCODE).child(USER.company).child("Pepsi Black")
    .addListenerForSingleValueEvent(AppValueEventListener {
        BARCODE = it.getValue(BarcodeDBModel::class.java) ?: BarcodeDBModel()
        if (BARCODE.namebar.isEmpty()){ BARCODE.namebar = "Ошибка" }
        function()
    })

Если вы не знаете ключ, вы можете прочитать всех детей, а затем l oop поверх них:

REF_DATABASE_ROOT.child(NODE_BARCODE).child(USER.company)
    .addListenerForSingleValueEvent(AppValueEventListener {
        for (snapshot in it.children) {
            BARCODE = snapshot.getValue(BarcodeDBModel::class.java) ?: BarcodeDBModel()
            if (BARCODE.namebar.isEmpty()){ BARCODE.namebar = "Ошибка" }
        }
        function()
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...