改造响应问题
Issue with Retrofit Response
我正在尝试通过 Retrofit 获取状态列表并尝试添加 Searchable Spinner。
我得到的:
我正在获取响应中的状态列表。
我可以在 Spinner 中访问一个状态。
我想要什么:
我想在 Spinner 中访问多个状态。
代码:
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
val stateArray = arrayListOf<String>(states?.get(0)!!.name)// Problem occur here i need to put value to get state
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
})
波科斯:
data class Responseval(val `data`: List<Data>, val message: String, val success: Boolean)
data class Data(val created_at: String, val id: Int, val name: String, val status: Int, val updated_at: String)
你可以使用这样的循环。
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
var stateArray = arrayListOf<String>
for(i = 0; i<response.body.data.size; i++){
stateArray.add(response.body.data.get(i).name)
}
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
})
kotlin 中的 for 循环
for (i in 0..(response.body.data.size-1)) {
stateArray.add(response.body.data.get(i).name)
}
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
val stateArray = Array<String>(states.size())
for(int i=0;i<sates.size();i++)
{
stateArray[i]=sates.get(i).name;
if(i == (sates.size() -1) )
{
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
}
}
})
您刚刚访问列表中的第一个位置,这就是微调器仅显示一个选项的原因。
快乐编码...
此方法将使数组中的项目变短
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
var stateArray = arrayListOf<String>
for(state in states){
stateArray.add(states.get(i).name)
}
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
})
我正在尝试通过 Retrofit 获取状态列表并尝试添加 Searchable Spinner。
我得到的:
我正在获取响应中的状态列表。
我可以在 Spinner 中访问一个状态。
我想在 Spinner 中访问多个状态。
代码:
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
val stateArray = arrayListOf<String>(states?.get(0)!!.name)// Problem occur here i need to put value to get state
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
})
波科斯:
data class Responseval(val `data`: List<Data>, val message: String, val success: Boolean)
data class Data(val created_at: String, val id: Int, val name: String, val status: Int, val updated_at: String)
你可以使用这样的循环。
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
var stateArray = arrayListOf<String>
for(i = 0; i<response.body.data.size; i++){
stateArray.add(response.body.data.get(i).name)
}
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
})
kotlin 中的 for 循环
for (i in 0..(response.body.data.size-1)) {
stateArray.add(response.body.data.get(i).name)
}
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
val stateArray = Array<String>(states.size())
for(int i=0;i<sates.size();i++)
{
stateArray[i]=sates.get(i).name;
if(i == (sates.size() -1) )
{
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
}
}
})
您刚刚访问列表中的第一个位置,这就是微调器仅显示一个选项的原因。
快乐编码...
此方法将使数组中的项目变短
getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
override fun onFailure(call: Call<Responseval>, t: Throwable) {
Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
}
override fun onResponse(call: Call<Responseval>, response: Response<Responseval>) {
if (response.isSuccessful!!){
val states = response.body()?.data
var stateArray = arrayListOf<String>
for(state in states){
stateArray.add(states.get(i).name)
}
val spinner = findViewById<Spinner>(R.id.spinner)
val adapter = ArrayAdapter<String>(this@MainActivity, android.R.layout.simple_spinner_item, stateArray)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
val options = stateArray
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
}
override fun onNothingSelected(parent: AdapterView<*>) {
// sometimes you need nothing here
}
}
}
}
})