2017-10-04 21 views
1

ファイアストアのドキュメントからデータを取得するためにvarスピンナー配列を割り当てましたが、これはresultです。Android Firestoreスピナーがドキュメントをロードしていません

これは私の現在の活動です。私は文字列を割り当てるなら、それを動作させることができますが、私が今やっているように私のドキュメントからデータをロードしたいのです。

これは私の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() 
     } 
    }) 

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

EDIT

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) 
      } 
     }) 

答えて

0

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

あなたspinnerArray変数に自分の配列を取得するには、あなたのタスクは、すなわち多少この

EDITのような成功したときにそれを取得する必要があります: はあなたの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内部

コールのコードのこの部分と

+0

NULL可能プロパティとしてspinnerArrayを初期化こんにちは、お返事に感謝。私はそれを試みましたが、if文の中でspinnerArrayにエラーがありました。 msgstr "型チェックは再帰的問題に遭遇しました" msgid。私はそのコードを私のvar spinnerArrayの中に入れました。それは私が正しいことですか? – AndyFire

+0

私はこれをしましたが、まだ奇妙な結果を得ました(私の編集を見てください) – AndyFire

+0

オン.resultこれを追加しなければなりませんでしたspinnerArray = task.result Array >は間違っていましたか? – AndyFire

関連する問題