#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 пользовательский адаптер для работы.