我在使用改装调用解析时遇到问题。这不是重复的问题。我尝试了太多的谷歌搜索也尝试了很多解决方案但它在我的情况下不起作用。所以请不要投票这个问题。
我也制作了pojo类,但没有得到如何绑定它。 data.java
public class Data {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("symbol")
@Expose
private String symbol;
@SerializedName("website_slug")
@Expose
private String websiteSlug;
@SerializedName("rank")
@Expose
private Integer rank;
@SerializedName("circulating_supply")
@Expose
private Double circulatingSupply;
@SerializedName("total_supply")
@Expose
private Double totalSupply;
@SerializedName("max_supply")
@Expose
private Double maxSupply;
@SerializedName("quotes")
@Expose
private Quotes quotes;
@SerializedName("last_updated")
@Expose
private Integer lastUpdated;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public String getWebsiteSlug() {
return websiteSlug;
}
public void setWebsiteSlug(String websiteSlug) {
this.websiteSlug = websiteSlug;
}
public Integer getRank() {
return rank;
}
public void setRank(Integer rank) {
this.rank = rank;
}
public Double getCirculatingSupply() {
return circulatingSupply;
}
public void setCirculatingSupply(Double circulatingSupply) {
this.circulatingSupply = circulatingSupply;
}
public Double getTotalSupply() {
return totalSupply;
}
public void setTotalSupply(Double totalSupply) {
this.totalSupply = totalSupply;
}
public Double getMaxSupply() {
return maxSupply;
}
public void setMaxSupply(Double maxSupply) {
this.maxSupply = maxSupply;
}
public Quotes getQuotes() {
return quotes;
}
public void setQuotes(Quotes quotes) {
this.quotes = quotes;
}
public Integer getLastUpdated() {
return lastUpdated;
}
public void setLastUpdated(Integer lastUpdated) {
this.lastUpdated = lastUpdated;
}
}
这是quotes.java
public class Quotes {
@SerializedName("USD")
@Expose
private USD uSD;
public USD getUSD() {
return uSD;
}
public void setUSD(USD uSD) {
this.uSD = uSD;
}
public Map<String, USD> data;
}
这是USD.java
public class USD {
@SerializedName("price")
@Expose
private Double price;
@SerializedName("volume_24h")
@Expose
private Double volume24h;
@SerializedName("market_cap")
@Expose
private Double marketCap;
@SerializedName("percent_change_1h")
@Expose
private Double percentChange1h;
@SerializedName("percent_change_24h")
@Expose
private Double percentChange24h;
@SerializedName("percent_change_7d")
@Expose
private Double percentChange7d;
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Double getVolume24h() {
return volume24h;
}
public void setVolume24h(Double volume24h) {
this.volume24h = volume24h;
}
public Double getMarketCap() {
return marketCap;
}
public void setMarketCap(Double marketCap) {
this.marketCap = marketCap;
}
public Double getPercentChange1h() {
return percentChange1h;
}
public void setPercentChange1h(Double percentChange1h) {
this.percentChange1h = percentChange1h;
}
public Double getPercentChange24h() {
return percentChange24h;
}
public void setPercentChange24h(Double percentChange24h) {
this.percentChange24h = percentChange24h;
}
public Double getPercentChange7d() {
return percentChange7d;
}
public void setPercentChange7d(Double percentChange7d) {
this.percentChange7d = percentChange7d;
}
}
这是网址。
https://api.coinmarketcap.com/v2/ticker/?limit=0
这是回应。
{
"data": {
"1": {
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"website_slug": "bitcoin",
"rank": 1,
"circulating_supply": 17020150.0,
"total_supply": 17020150.0,
"max_supply": 21000000.0,
"quotes": {
"USD": {
"price": 9334.59,
"volume_24h": 6857290000.0,
"market_cap": 158876121989.0,
"percent_change_1h": 0.12,
"percent_change_24h": -2.28,
"percent_change_7d": 0.55
}
},
"last_updated": 1525694372
},
"1027": {
"id": 1027,
"name": "Ethereum",
"symbol": "ETH",
"website_slug": "ethereum",
"rank": 2,
"circulating_supply": 99285221.0,
"total_supply": 99285221.0,
"max_supply": null,
"quotes": {
"USD": {
"price": 733.22,
"volume_24h": 3495650000.0,
"market_cap": 72797909741.0,
"percent_change_1h": 1.21,
"percent_change_24h": -5.64,
"percent_change_7d": 7.02
}
},
"last_updated": 1525694355
}
}
}
我尝试使用改装电话。
ArrayList<PriceData> pricedatalist;
ArrayList<Data> datalistnew;
ArrayList<Quotes> quoteslist;
ArrayList<USD> usdlist;
ApiService apiService =
ApiClient.getClient().create(ApiService.class);
Call<Data> call = apiService.getChampionData();
call.enqueue(new Callback<Data>() {
@Override
public void onResponse(Call<Data> call, Response<Data> response) {
dd=response.body();
}
@Override
public void onFailure(Call<Data> call, Throwable t) {
Log.e("Error",t.getMessage());
}
});
答案 0 :(得分:4)
您需要更改Call<Data> call = apiService.getChampionData();
无法解析响应以解析一个Data对象,而应创建一个新的响应对象,如
public class DataResponse {
private Map<String, Data> data;
}
并将其称为Call<DataResponse> call = apiService.getChampionData()
;
答案 1 :(得分:1)
您需要在此上面再添加一个POJO对象,如下所示:
public class Data {
@SerializedName("data")
@Expose
private Map<String, DataRow> result;
}
然后只需将您的数据类重命名为 DataRow
public class DataRow {
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("symbol")
@Expose
private String symbol;
@SerializedName("website_slug")
@Expose
private String websiteSlug;
@SerializedName("rank")
@Expose
private Integer rank;
@SerializedName("circulating_supply")
@Expose
private Double circulatingSupply;
@SerializedName("total_supply")
@Expose
private Double totalSupply;
@SerializedName("max_supply")
@Expose
private Double maxSupply;
@SerializedName("quotes")
@Expose
private Quotes quotes;
@SerializedName("last_updated")
@Expose
private Integer lastUpdated;
public Integer getId() {
return id;
}
}
在那之后,你没有任何问题可以像这样打电话:
Call<Data> call = apiService.getChampionData();