问题描述
我的活动中有一个微调器,它从一次齐射呼叫中获取数据。数据显示在微调器中。但是当我点击微调器中的特定项目时,它会显示。
微调代码
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 从服务器获取数据后设置适配器。从活动中调用此服务器调用不是正确的方法,但它是完全不同的主题。您可以简单地编辑您的代码,如:
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()
}
很高兴能帮上忙。