Skip to main content

How to bind data from a web service to a Spinner in Kotlin Android

How to bind data from a web service to a Spinner in Kotlin Android.

Here is a detailed step-by-step tutorial on how to bind data from a web service to a Spinner in Kotlin Android:

Step 1: Set up the project

  • Create a new project in Android Studio.
  • Add the necessary dependencies in your project's build.gradle file:
    implementation 'com.android.volley:volley:1.2.0'

Step 2: Design the layout

  • Open the layout file where you want to add the Spinner.
  • Add a Spinner element to the layout:
    <Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Step 3: Create a data model

  • Create a data class that represents the data you will receive from the web service. For example, if you are fetching a list of countries, you can create a Country data class with properties like id and name.

Step 4: Fetch data from the web service

  • Create a new Kotlin file for handling web service requests, e.g., WebServiceHelper.kt.

  • Inside the file, create a function to fetch the data from the web service using a library like Volley:

    fun fetchDataFromWebService(context: Context, listener: (List<Country>) -> Unit) {
    val requestQueue = Volley.newRequestQueue(context)
    val url = "https://api.example.com/countries"

    val request = JsonArrayRequest(Request.Method.GET, url, null,
    { response ->
    val countries = mutableListOf<Country>()
    for (i in 0 until response.length()) {
    val countryObj = response.getJSONObject(i)
    val country = Country(
    countryObj.getInt("id"),
    countryObj.getString("name")
    )
    countries.add(country)
    }
    listener(countries)
    },
    { error ->
    Log.e("WebServiceHelper", "Error: ${error.message}")
    })

    requestQueue.add(request)
    }

Step 5: Bind data to the Spinner

  • In your activity or fragment, initialize the Spinner and call the function to fetch data from the web service:

    val spinner: Spinner = findViewById(R.id.spinner)

    WebServiceHelper.fetchDataFromWebService(this) { countries ->
    val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, countries)
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = adapter
    }

Step 6: Handle item selection

  • If you want to perform some action when an item is selected from the Spinner, you can add an OnItemSelectedListener:

    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
    val selectedCountry = spinner.selectedItem as Country
    // Do something with the selected country
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
    // Handle case when no item is selected
    }
    }

That's it! You have successfully bound data from a web service to a Spinner in Kotlin Android.