Android Firestore微调不加载我的文档

Android Firestore微调不加载我的文档

问题描述:

所以,我分配了我的var微调控制器数组从我的文档中获取数据在firestore,但这是我得到的resultAndroid 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() 
     } 
    }) 

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

编辑

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

嘿安迪我没有使用公司的FireStore不过也有火力地堡经验数据库和Kotlin。根据我的经验,我可以清楚地告诉你,你不会直接接收你的数组,因为在主线程上没有完成数据的提取。目前,您的spinnerArray拥有对Firebase任务的引用,这就是您的Spinner显示此类文本的原因。

为了让您在您的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可为空属性

+0

您好,感谢您的回复。我确实尝试过,但是if语句中的spinnerArray出现错误。 “类型检查遇到了递归问题”。我把这段代码放入我的var spinnerArray中。这就是我应该做的对吗? – AndyFire

+0

我这样做,但仍然得到一个奇怪的结果(看看我的EDIT)谢谢 – AndyFire

+0

在.result必须添加此var spinnerArray = task.result作为Array >是错误的吗? – AndyFire