【问题标题】:Issue with Retrofit Response改造响应问题
【发布时间】:2019-08-27 01:24:36
【问题描述】:

我正在尝试通过 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)

【问题讨论】:

  • 您需要发布 json 响应
  • 添加先生@SantanuSur
  • 这只是因为 arrayListOf(states?.get(0)!!.name)。您刚刚获得了该州的名字。
  • 是的,我想要所有的州名

标签: android kotlin retrofit2 spinner


【解决方案1】:

你可以使用这样的循环。

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

【讨论】:

    【解决方案2】:
    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
                        }
                    }
                }
        }
    }
            }
    
        })
    

    您只是访问列表中的第一个位置,这就是微调器仅显示一个选项的原因。

    快乐编码...

    【讨论】:

      【解决方案3】:

      此方法将在数组中快速添加项目

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

      【讨论】:

        猜你喜欢
        • 2020-03-22
        • 2015-10-22
        • 2019-03-14
        • 2018-05-16
        • 1970-01-01
        • 2021-07-14
        • 2015-11-03
        • 2017-05-21
        • 2018-11-04
        相关资源
        最近更新 更多