@emigrantdd

Как решить проблему с json?

Доброго времени суток. Вообщем проблема состоит в том,что при добавлении в ArrayList нового класса,которому я передаю переменные в одном порядке,он мне возвращает их в другом.
Вот код которым я из главного класса передаю переменные(сейчас для лучшего понимания вместо переменных я буду передавать просто строку):
temp_list_gps_wifi.add(new temp_class_gps_wifi("1","2","3"));


temp_list_gps_wifi-как вы поняли это ArrayListtemp_class_gps_wifi соответственно класс.
При возвращении с класса temp_class_gps_wifi,порядок в строке получается вида :{"1","3","2" }.
Вот код temp_class_gps_wifi:
package dd_pc.service;

/**
 * Created by dd on 17.10.2014.
 */
public class temp_class_gps_wifi {
    String gps;String wifi;
    String wifi_mac;
    public temp_class_gps_wifi (String gps,String wifi,
            String wifi_mac ){
        this.gps=gps;  this.wifi_mac=wifi_mac;
        this.wifi=wifi;

    }

    public String getGps() {
        return gps;
    }
    public String getWifi() {
        return wifi;
    }
    public String getWifi_mac() {
        return wifi_mac;
    }
    public void setGps(String gps) {
        this.gps = gps;
    }

    public void setWifi_mac(String wifi_mac) {
        this.wifi_mac = wifi_mac;
    }

    public void setWifi(String wifi) {
        this.wifi = wifi;
    }



}
  • Вопрос задан
  • 3116 просмотров
Решения вопроса 1
Tyranron
@Tyranron
ArrayList тут, скорее всего, совершенно ни причем, дело в порядке сериализации полей классов.
Вот что нашел здесь:

Еще один момент, который многие не знают. При стандартной сериализации учитывается порядок объявления полей в классе. Во всяком случае, так было в ранних версиях, в JVM версии 1.6 реализации Oracle уже порядок неважен, важны тип и имя поля. Состав же методов с очень большой вероятностью повлияет на стандартный механизм, при том, что поля могут вообще остаться теми же.

То есть, логично предположить, что при сериализации класса совершенно не гарантируется сохранение ни порядка объявления полей в классе, и уж точно, ни порядка передачи параметров в конструктор класса.

P.S. А зачем Вам в JSON'е гарантированно сохранять порядок полей? Может это уж и не так кричтично на самом деле?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VYakushev
@VYakushev
Разработчик Android в Nowtaxi
Вы пишете про JSON, а где сам код добавления/изъятия в JSON? Судя по вашей строке {"1","3","2" } уверен, что вы используете JSON неправильно. Если вы хотите передавать объект, то и передавайте JSONObject в виде
{"gps_wifi":{"gps":"1", "wifi_mac":"3", "wifi":"2" }}
. Тогда порядок значений не будет иметь роли. Вообще для этих целей удобно использовать Gson. Тогда добавление вашего объекта будет выглядеть как:
new Gson().toJson(new temp_class_gps_wifi("1","2","3"))

, а изъятие:
new Gson().fromJson(json, temp_class_gps_wifi.class)

Либо можете в ваш класс добавить два метода: toJson() и fromJson(), и написать нужный код вручную.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы