1

そのため、var spinner 配列を割り当てて、firestore のドキュメントからデータをフェッチしましたが、これが結果得られました。

これが私の現在の活動です。文字列を割り当てれば機能させることができますが、最終的には、今しようとしているようにドキュメントからデータをロードしたいと考えています。

これが私のファイアーストアセットアップです。

理由はありますか?ありがとう

var db = FirebaseFirestore.getInstance()



var spinnerArray = arrayOf(db.collection("KitList")
           .get()
           .addOnCompleteListener { task ->
               if (task.isSuccessful) {
                   for (document in task.result) {
                       Log.d("weight05", document.id + " => " + document.data)
                   }
               } else {
                   Log.w("error", "Error getting documents.", task.exception)
               }
           })

var newKitList = mutableListOf<String>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_new_kit_list)
    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()
        }
    })

==============

編集

var spinnerArray: Array<Task<QuerySnapshot>> = arrayOf(db.collection("KitList").get()
       .addOnCompleteListener { task ->
           if (task.isSuccessful) {
               spinnerArray = task.result as Array<Task<QuerySnapshot>> //or however you get your document array
               for (document in task.result) {
                   Log.d("weight05", document.id + " => " + document.data)
               }
           } else {
               Log.w("error", "Error getting documents.", task.exception)
           }
       })
4

1 に答える 1

0

Hey Andy 私はまだ FireStore を使用していませんが、Firebase Database と Kotlin の経験があります。そして、私の経験から、データのフェッチはメインスレッドで行われないため、配列を直接受け取ることはできないことを明確に伝えることができます。現在、spinnerArray は Firebase タスクへの参照を保持しているため、スピナーにそのようなテキストが表示されます。

spinnerArray 変数で配列を取得するには、タスクが成功したときに配列を取得する必要があります。つまり、次のようになります。

編集: var spinnerArray の初期化を削除し、スピナーのアダプターを追加したのと同じようにします。

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_kit_list)
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()
    }
})
db.collection("KitList")
       .get()
       .addOnCompleteListener { task ->
           if (task.isSuccessful) {
               spinnerArray = task.result //or however you get your document array
               var spinnerArray = task.result as Array<Task<QuerySnapshot>>
               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
               for (document in task.result) {
                   Log.d("weight05", document.id + " => " + document.data)
               }
           } else {
               Log.w("error", "Error getting documents.", task.exception)
           }
       }
}

このコードを onCreate 内で呼び出し、spinnerArray を null 許容プロパティとして初期化します

于 2017-10-04T13:41:02.950 に答える