Как накачать спиннер из массива, проанализированного с помощью GSON - PullRequest
0 голосов
/ 18 мая 2011

Я новичок в библиотеке GSON, у меня есть структура данных json, которая выглядит следующим образом.

{"networks": [{"networkId": 0, "networkName": "Friends"}, {"networkId": "1", "networkName": "что-то"}, {"networkId": "4", "networkName": "вторая вещь"}, {"networkId": "28", "networkName":" Другая сеть "}, {" networkId ":" 2 "," имя сети ":" бла "}]

Я получаю эти данные с помощью следующего запроса

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

Класс данных сетей выглядит следующим образом:

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

1 Ответ

1 голос
/ 18 мая 2011

Создайте свой собственный Адаптер, используя свой список nerworks или объект NetworksData. Вы можете создать подкласс BaseAdapter для реализации Адаптера (обратите внимание, что вы также можете создавать подклассы или компоновать с ArrayAdapter (или любой другой реализацией) для его повторного использования).

...