H3nry T33
H3nry T33

Reputation: 356

How to assign Json Array into spinner list?

I have a JSON sample list as below and I tried to put this into my spinner:-

[{"occupation_id":0,"occupation_name":"Teacher"},{"occupation_id":1,"occupation_name":"Business Owner"}]

When I tried to apply these code:-

val jsonArray = JSONArray(jsonString)

        var list = ArrayList<Occupation>()

        var x = 0
        while (x < jsonArray.length()) {
            var jsonObject = jsonArray.getJSONObject(x)

            list.add(Occupation(
                    jsonObject.getString("occupation_id"),
                    jsonObject.getString("occupation_name")
            ))
            x++
        }

        var spinnerOccupation = findViewById<Spinner>(jasiez.helloworld.jasiez.R.id.spinnerOccupation)
        // Initializing an ArrayAdapter
        val occupationAdapter = ArrayAdapter(
                this, // Context
                android.R.layout.simple_spinner_item,
                list// Array
        )

        occupationAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line)
        spinnerOccupation.adapter = occupationAdapter

I getting this in my spinner

enter image description here

When I tried to change

val occupationAdapter = ArrayAdapter(
                this, // Context
                android.R.layout.simple_spinner_item,
                list// Array
        )

to

val occupationAdapter = ArrayAdapter(
                this, // Context
                android.R.layout.simple_spinner_item,
                list.occupation_name.toList()
        )

I getting error Unresolved reference: occupation_name. If I change to list[0].occupation_name.toList() I will show 1st occupation name with 1 char in every single dropdown list option.

How can I get proper occupation name in each option here? Please help.Thank you.

Upvotes: 0

Views: 652

Answers (3)

h_malik
h_malik

Reputation: 167

You can write a custom adapter to hold your data list, and override getview to set the values in spinner's textview. Have a look at this link to see an example.

Upvotes: 0

jay shah
jay shah

Reputation: 300

When you are using ArrayAdapter, you can only pass the list of String (List), You can't pass like List so make the list like below:

    var list = ArrayList<String>()
    .......
    list.add(jsonObject.getString("occupation_name"))

Upvotes: 1

no_profile
no_profile

Reputation: 374

I have also encountered the same when dealing with JSon. What I did is I override toString from my Object. In your case, you can override a toString to your occupation name from your Occupations Object.

public class Occupation {
    int occupation_id;
    String occupation_name;

    public Occupation() {
    }

    public int getOccupation_id() {
        return occupation_id;
    }

    public void setOccupation_id(int occupation_id) {
        this.occupation_id = occupation_id;
    }

    public String getOccupation_name() {
        return occupation_name;
    }

    public void setOccupation_name(String occupation_name) {
        this.occupation_name = occupation_name;
    }

    //converts your occupation_name to string
    @NonNull
    @Override
    public String toString() {
        return occupation_name;
        //or you can also add title to your occupation name by doing this
       //return "Occupation: "+ occupation_name;
    }
}

Check out if this works for you.

Upvotes: 0

Related Questions