Доработка2: почему object равен null, если ответ сервера в порядке, а GSON не сообщил о какой-либо проблеме с синтаксическим анализом?

#android #gson #retrofit2

#Android #gson #retrofit2

Вопрос:

введите описание изображения здесь

Почему здесь price null?

JSON извлекается из здесь (вы также можете использовать несколько параметров, вот почему приведенный ниже объект использует Map s; пример). Вот CoinGeckoCoinPrice :

 public class CoinGeckoCoinPrice {
    @Expose
    private Map<String, Map<String, Double>> price;

    public double getPrice(String slug, String pair) {
        ...
    }
}
  

Вот мой вызов Retrofit2:

 @GET("/api/v3/simple/price")
Call<CoinGeckoCoinPrice> getCoinPrice(@Query("ids") String coinSlugs, @Query("vs_currencies") String pairs);
  

Я проверил logcat на наличие любого сообщения об ошибке GSON, и его нет. Так почему price должно быть null?


Это работает, если я изменяю вызов Retrofit2 на use JsonObject :

 @GET("/api/v3/simple/price")
Call<JsonObject> getCoinPrice(@Query("ids") String coinSlugs, @Query("vs_currencies") String pairs);
  

Но я хочу обернуть объект, чтобы я мог писать функции извлечения данных в CoinGeckoCoinPrice классе.

Ответ №1:

Возвращаемый Json-файл не имеет price свойства, поэтому Gson не знает, что он должен анализировать bitcoin объект и его цену в долларах США для этого объекта. Учитывая, что возвращаемые вами данные могут относиться к любому ключу (например, биткойн, эфириум …) и его свойства также могут иметь любые ключи (например, доллары США, евро …), вам нужно будет вручную проанализировать это, предоставив Gson пользовательский адаптер для работы.