为什么我的微调器不显示所选项目

Why does my spinner not displaying selected item

我的 activity 中有一个微调器,它从凌空调用中获取数据。数据显示在微调器中。但是当我点击微调器中的特定项目时,它确实会显示。

旋转器代码

private fun spinner() {

    val spinner = findViewById<Spinner>(R.id.report2Spinner)
    if (spinner != null) {
        val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, companyList)
        spinner.adapter = arrayAdapter
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                selectedItem = spinner.getItemAtPosition(position).toString()
                Toast.makeText(this@Report2Activity, selectedItem, Toast.LENGTH_SHORT).show()
                spinner.setSelection(position)
            }

            override fun onNothingSelected(parent: AdapterView<*>) {

            }
        }
    }
}

声明保存排球数据的数组

var companyList: ArrayList = ArrayList()

齐射

private fun jsonGetCompany() {
    //Declaring URL for JSON file
    val url = "https://mist.zp.co.za:6502/MIST.svc/CMP/M@H$@203@R"

    val request = JsonObjectRequest(
            Request.Method.GET, url, null,
            { response ->
                try {
                    val jsonArray = response.getJSONArray("Table")
                    for (i in 0 until jsonArray.length()) {
                        //Adding variables to JSONArray
                        val item = jsonArray.getJSONObject(i)
                        companyList.add(item.getString("Company"))
                    }
                } catch (e: JSONException) {
                    e.printStackTrace()
                }
            }, { error -> error.printStackTrace() })
    //Adding request to the queue
    requestQueue?.add(request)
    //Setting timeout and retries
    request.retryPolicy = DefaultRetryPolicy(30000, 3, 1f)
}

这是我调用 spinner() 和 jsonGetCompany() 的 onCreate

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_report2)
    title = "Report 2"


    //Initialising Recyclerview
    recyclerViewReport2 = findViewById(R.id.recyclerViewReport2)
    val linearLayoutManager = LinearLayoutManager(applicationContext)
    recyclerViewReport2.layoutManager = linearLayoutManager

    //Declaring Volley requestQueue for JSON calls
    requestQueue = Volley.newRequestQueue(this)

    //Using JSON request function
    jsonGetCompany()
    spinner()

    val fromDatePicker: DatePicker = findViewById(R.id.report2FromDatePicker)
    val endDatePicker: DatePicker = findViewById(R.id.report2EndDatePicker)

    val buttonLoad: Button = findViewById(R.id.buttonLoad)
    buttonLoad.setOnClickListener {
        fromDate = "${fromDatePicker.year}-${fromDatePicker.month + 1}-${fromDatePicker.dayOfMonth}"
        endDate = "${endDatePicker.year}-${endDatePicker.month + 1}-${endDatePicker.dayOfMonth}"
        Toast.makeText(this, "Company is: $selectedItem",       Toast.LENGTH_SHORT).show()
        jsonRequestReport2Data()

        if (recyclerViewReport2.isNotEmpty()) {
            company.clear()
            report2Adapter.notifyDataSetChanged()
        }
    }
 }

编辑: 这是因为 jsonGetCompany()spinner() 被同时调用,但 volley 异步工作。您应该在 volley 从服务器获取数据后设置适配器。从 activity 调用此服务器调用不是正确的方法,但它是完全不同的主题。您可以像这样简单地编辑您的代码:

 try {
      val jsonArray = response.getJSONArray("Table")
      for (i in 0 until jsonArray.length()) {
      //Adding variables to JSONArray
           val item = jsonArray.getJSONObject(i)
           companyList.add(item.getString("Company"))
      }
      setSpinner()
 } catch (e: JSONException) {
     e.printStackTrace()
 }

很高兴我能帮上忙。