Skip to content Skip to sidebar Skip to footer

Issue With Retrofit Response

I am trying to get List of States through Retrofit and trying to add in Searchable Spinner. What I get : I am getting List of States in Response. I can access one state in Spinner.

Solution 1:

You can use a loop like this.

getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
            overridefunonFailure(call: Call<Responseval>, t: Throwable) {
                Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
            }

            overridefunonResponse(call: Call<Responseval>, response: Response<Responseval>) {
                if (response.isSuccessful!!){
                    val states = response.body()?.datavar 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 {
                        overridefunonItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                            Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
                        }

                        overridefunonNothingSelected(parent: AdapterView<*>) {

                            // sometimes you need nothing here
                        }
                    }
                }
            }

        })

for loop in kotlin

for (i in0..(response.body.data.size-1)) {
        stateArray.add(response.body.data.get(i).name)
    }

Solution 2:

getMainApp().electAPI.getStates().enqueue(object : Callback<Responseval>{
        overridefunonFailure(call: Call<Responseval>, t: Throwable) {
            Toast.makeText(this@MainActivity, t?.message, Toast.LENGTH_SHORT)
        }

        overridefunonResponse(call: Call<Responseval>, response: Response<Responseval>) {
            if (response.isSuccessful!!){
                val states = response.body()?.dataval 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 {
                    overridefunonItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                        Toast.makeText(this@MainActivity, " You select >> "+options[position], Toast.LENGTH_SHORT).show();
                    }

                    overridefunonNothingSelected(parent: AdapterView<*>) {

                        // sometimes you need nothing here
                    }
                }
            }
    }
}
        }

    })

You are just accessing the first position on the list that's why spinner is displaying only one option.

Happy Coding...

Post a Comment for "Issue With Retrofit Response"