Как да надуя спинер от масив, анализиран с GSON

Нов съм в библиотеката GSON, имам json структура от данни, която изглежда така.

{"networks":[{"networkId":0,"networkName":"Приятели"},{"networkId":"1","networkName":"something"},{"networkId":"4"," networkName":"второ нещо"},{"networkId":"28","networkName":"друга мрежа"},{"networkId":"2","networkName":"blah"}]

Получавам тези данни чрез следната заявка

RestClient client = new RestClient();

client.setDebug();
client.AddParam("method", "get_user_networks");
client.AddParam("session_key", sessionKey);

client.Execute();

String response = client.getResponse();

NetworksData retval = null;
Gson gson = new Gson();
retval = gson.fromJson(response, NetworksData.class);

класът данни Networks изглежда така

public class NetworksData {

private List<Network> networks;
private List<Group> groups;

public List<Network> getNetworks() {
    return this.networks;
}

public List<Group> getGroups() {
    return this.groups;
}

public void setNetworks(List<Network> networks) {
    this.networks = networks;
}

public void setGroups(List<Group> groups) {
    this.groups = groups;
}

}

и индивидуалният мрежов клас е следният

public class Network {

private String networkName;
private Integer networkId;

public String getName(){
    return this.networkName;
}
public Integer getId(){
    return this.networkId;
}
public void setName(String nameIn){
    this.networkName = nameIn;
}
public void setId(Integer idIn){
    this.networkId = idIn;
}

}

Опитвам се да надуя въртящ се механизъм с имената на мрежата, мога ръчно да обходя масива и да изградя String масив и да го раздуя по този начин, но това изглежда контраинтуитивно за целия обектен модел. Няма ли начин да вкарате списъка директно в спинера?

Ето един начин, който работи, но е грешен

networkItems = new String[total];


// networks
if (retval.getNetworks().size() > 0) {

    for (Network network : retval.getNetworks()) {
    networkItems[i] = network.getName();
    i++;

       }
}

и след това надуйте центрофугата така

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, networkItems);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        networkSpinner.setAdapter(adapter);

person Brian    schedule 18.05.2011    source източник


Отговори (1)


Създайте свой персонализиран адаптер, като използвате вашия мрежов списък или обект NetworksData. Можете да създадете подклас BaseAdapter, за да внедрите адаптера (обърнете внимание, че можете също да създадете подклас или композирайте с ArrayAdapter (или друга реализация), за да го използвате повторно).

person aromero    schedule 18.05.2011