Дооснащение - не может разобрать данные - PullRequest
1 голос
/ 25 января 2020

Кто-нибудь может мне помочь? Я звоню с Retrofit. Строки в ответе включены, но я не могу принять ставки. Единственный класс, который успешно возвращает мне оценки, это Объект, но я не могу использовать его должным образом. Я использую List, ArrayLists, Arrays объектов, но все еще ничего. Любая хорошая идея?

    "success": true,
    "timestamp": 1579966625,
    "base": "EUR",
    "date": "2020-01-25",
    "rates": {
        "AED": 4.049675,
        "AFN": 84.840896,
        "ALL": 121.996492,
        "AMD": 527.973758,
        "ANG": 1.825067,
        "AOA": 547.470083,
        "ARS": 66.164897,
        "AUD": 1.615455,
        "AWG": 1.984572,
        "AZN": 1.878695,
        "BAM": 1.954385,
        "BBD": 2.226574,
        "BDT": 93.569172,
        "BGN": 1.955653,
        "BHD": 0.4156,
        "BIF": 2084.903075,
        "BMD": 1.10254,
        "BND": 1.489912,
        "BOB": 7.625632,
        "BRL": 4.610165,
        "BSD": 1.102795,
        "BTC": 0.00013,
        "BTN": 78.618189,
        "BWP": 11.83236,
        "BYN": 2.329178,
        "BYR": 21609.783322,
        "BZD": 2.222877,
        "CAD": 1.449565,
        "CDF": 1857.780241,
        "CHF": 1.070999,
        "CLF": 0.031059,
        "CLP": 857.008628,
        "CNY": 7.647994,
        "COP": 3710.124161,
        "CRC": 623.614653,
        "CUC": 1.10254,
        "CUP": 29.217309,
        "CVE": 110.750574,
        "CZK": 25.167074,
        "DJF": 195.943837,
        "DKK": 7.47269,
        "DOP": 58.958369,
        "DZD": 132.145997,
        "EGP": 17.42,
        "ERN": 16.538494,
        "ETB": 35.469143,
        "EUR": 1,
        "FJD": 2.389248,
        "FKP": 0.843124,
        "GBP": 0.843298,
        "GEL": 3.175746,
        "GGP": 0.843124,
        "GHS": 6.146705,
        "GIP": 0.843124,
        "GMD": 56.395349,
        "GNF": 10380.414166,
        "GTQ": 8.480209,
        "GYD": 230.042031,
        "HKD": 8.56925,
        "HNL": 27.354445,
        "HRK": 7.4418,
        "HTG": 109.168282,
        "HUF": 336.236144,
        "IDR": 15005.072786,
        "ILS": 3.809221,
        "IMP": 0.843124,
        "INR": 78.639219,
        "IQD": 1312.022559,
        "IRR": 46422.445633,
        "ISK": 137.387931,
        "JEP": 0.843124,
        "JMD": 152.18088,
        "JOD": 0.781744,
        "JPY": 120.489431,
        "KES": 111.240002,
        "KGS": 77.006137,
        "KHR": 4465.287247,
        "KMF": 492.28828,
        "KPW": 991.781421,
        "KRW": 1290.236792,
        "KWD": 0.335051,
        "KYD": 0.919029,
        "KZT": 417.421433,
        "LAK": 9790.555278,
        "LBP": 1669.245892,
        "LKR": 200.233596,
        "LRD": 213.893137,
        "LSL": 15.865971,
        "LTL": 3.255514,
        "LVL": 0.666916,
        "LYD": 1.549112,
        "MAD": 10.634041,
        "MDL": 19.518671,
        "MGA": 4035.296656,
        "MKD": 61.569485,
        "MMK": 1617.748627,
        "MNT": 3032.536174,
        "MOP": 8.827954,
        "MRO": 393.606624,
        "MUR": 40.508609,
        "MVR": 17.03466,
        "MWK": 813.127347,
        "MXN": 20.713694,
        "MYR": 4.482381,
        "MZN": 69.840437,
        "NAD": 15.865966,
        "NGN": 399.674847,
        "NIO": 37.734473,
        "NOK": 9.975065,
        "NPR": 125.789149,
        "NZD": 1.668114,
        "OMR": 0.42447,
        "PAB": 1.102795,
        "PEN": 3.664296,
        "PGK": 3.726999,
        "PHP": 56.04252,
        "PKR": 170.480285,
        "PLN": 4.257073,
        "PYG": 7190.549671,
        "QAR": 4.014073,
        "RON": 4.780656,
        "RSD": 117.509121,
        "RUB": 68.437416,
        "RWF": 1033.631218,
        "SAR": 4.136262,
        "SBD": 9.155667,
        "SCR": 15.039999,
        "SDG": 49.949116,
        "SEK": 10.53849,
        "SGD": 1.489945,
        "SHP": 0.843124,
        "SLL": 10708.423459,
        "SOS": 642.233573,
        "SRD": 8.222785,
        "STD": 23771.632661,
        "SVC": 9.649953,
        "SYP": 567.806781,
        "SZL": 15.865958,
        "THB": 33.669407,
        "TJS": 10.691197,
        "TMT": 3.869915,
        "TND": 3.122949,
        "TOP": 2.536986,
        "TRY": 6.548099,
        "TTD": 7.456555,
        "TWD": 33.11483,
        "TZS": 2541.864035,
        "UAH": 26.929194,
        "UGX": 4052.604171,
        "USD": 1.10254,
        "UYU": 41.171937,
        "UZS": 10529.257039,
        "VEF": 11.011622,
        "VND": 25548.607349,
        "VUV": 127.619001,
        "WST": 2.959021,
        "XAF": 655.416022,
        "XAG": 0.0609,
        "XAU": 0.000702,
        "XCD": 2.97967,
        "XDR": 0.79924,
        "XOF": 657.114186,
        "XPF": 119.791369,
        "YER": 276.021282,
        "ZAR": 15.883357,
        "ZMK": 9924.186698,
        "ZMW": 15.962445,
        "ZWL": 355.01787
    }
}

1 Ответ

0 голосов
/ 25 января 2020

TLDR

Используйте Map<String, Float> для преобразования rates.


Проблема в том, что rates - это не список, а объект JSON. Поэтому, чтобы Retrofit мог его проанализировать, вам нужно определить объект POJO следующим образом:

public class ResponsePOJO {
    private long timestamp; 
    private String base;
    private String date;
    private RatesPOJO rates;

    //getters and setters
}

public class RatesPOJO {
    private Float AED;
    private Float AFN;
    private Float ALL;
    .....
    .....
    private Float ZWL;

    // getters and setters
}

Тогда он должен работать. Однако, как вы уже могли заметить, это абсолютно не лучший подход.

Что бы я сделал на вашем месте, и если бы у меня был доступ к бэкэнду, который возвращается что JSON означает, что rates должен быть массивом JSON объектов, подобным следующему:

"rates": [
       {
        cityTag: "AED",
        rate: 4.049675
       },
       {
        cityTag: "AFN",
        rate: 84.840896
       },
       ...
       ...
];

Затем вы можете переписать ваши объекты POJO следующим образом:

public class ResponsePOJO {
    private long timestamp; 
    private String base;
    private String date;
    private List<RatePOJO> rates;

    //getters and setters
}

public class RatePOJO {
    private String cityTag;
    private Float rate;
}

Если вы не можете изменить способ построения JSON, вы можете попробовать установить GSON в качестве конвертера в Retrofit, а затем определить rates как Map<String, Float>. Это сделает работу.

...