Android使用firebase数据而不是字符串填充arrayOf

时间:2017-09-28 10:22:12

标签: android firebase firebase-realtime-database kotlin spinner

我是firebase的新手,所以有些事情对我来说仍然有点混乱。

我有一个数组:var spinnerArray = arrayOf("Dumbell", "Punching Bag", "Yoga Ball", "Skipping Rope") 然后我传递给一个微调器。一切正常。虽然,现在我想把它带到下一个级别,而不是用我添加到数组中的字符串填充微调器,我希望它传递我在firebase数据库上的数据。原因是,有些项目有子项目,所以我需要使用对象。

我真的不知道该如何去替换它。 你能帮我吗

我已将我的应用程序连接到实时数据库。

由于

  {
  "KitList" : {
    "kettle" : {
      "10KG" : "10KG",
      "5KG" : "5KG"
    },
    "punchBag" : "punch bag",
    "sandbag" : "sandbag"
  }
}

有人告诉我,我的价值不应该等于钥匙?

这是我的模特

class KitList(val title: String) {

override fun toString(): String {
    return super.toString()
}}

这是微调器所在的活动:

class NewKitListActivity : AppCompatActivity() {
var database = FirebaseDatabase.getInstance()
var myRef = database.getReference("KitList")



var spinnerArray = arrayOf("Dumbell", "Punching Bag", "Yoga Ball", "Skipping Rope")

inner class Item {
    var IdItem: Int = 0
    var Item: String? = null
    var SubItems: ArrayList<Item>? = null
}

var newKitList = mutableListOf<String>()
val selectedItems: MutableList<String>? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_new_kit_list)
    var context = this;
    var addButton = addKitItemBtn

    val spinner = newKitItemSpinner
    val spinnerArrayAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, spinnerArray)
    //selected item will look like a spinner set from XML
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = spinnerArrayAdapter

    val kitList = newKistListView
    val listViewAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, newKitList)
    kitList.adapter = listViewAdapter

    addButton.setOnClickListener(object : View.OnClickListener {
        override fun onClick(v: View?) {
            val selectedItem = spinner.selectedItem.toString()
            newKitList.add(selectedItem)
            listViewAdapter.notifyDataSetChanged()
        }
    })}}

2 个答案:

答案 0 :(得分:0)

您基本上有两个选择:

  1. 实施SpinnerAdapter,以便您可以传递Firebase对象,而不是使用ArrayAdapter。
  2. 将Firebase对象转换为字符串并将其传递给ArrayAdapter。

答案 1 :(得分:0)

我昨天完全删除了我的答案,并用这个更改了

我从这个answer

找到了这个库

这应该是现在在kotlin中解析json的最好方法。

你可以在链接上找到所有答案,但这里有一些基本步骤:

  1. 安装

    repositories {
    jcenter()
    }
    
    dependencies {
    compile 'com.beust:klaxon:0.30'
    }
    
  2. 让我们说你有这个json:

    [
    {
        "name" : "John",
        "age" : 20
    },
    {
        "name" : "Amy",
        "age" : 25
    },
    {
        "name" : "Jessica",
        "age" : 38
    }
    ]
    
  3. 我们可以轻松收集所有年龄:

    val array = parse("/e.json") as JsonArray<JsonObject>
    
    val ages = array.long("age")
    println("Ages: $ages")
    
    // Prints: Ages: JsonArray(value=[20, 25, 38])