我开始使用RxJava和Retrofit,并希望创建一个简单的应用程序来显示100个加密货币的列表。
我正在进行api调用,结果是这样的:
{
"Response": "Success",
"Message": "Coin list succesfully returned!",
"BaseImageUrl": "https://www.cryptocompare.com",
"BaseLinkUrl": "https://www.cryptocompare.com",
"Data": {
"LTC": {
"Id": "3808",
"Url": "/coins/ltc/overview",
"ImageUrl": "/media/19782/ltc.png",
"Name": "LTC",
"CoinName": "Litecoin",
"FullName": "Litecoin (LTC)",
"Algorithm": "Scrypt",
"ProofType": "PoW",
"SortOrder": "2"
}
...
},
"Type": 100
}
但我想要的只是"响应"和"数据"。由于为每个硬币创建100个不同的模型类是不切实际的,我想将所有硬币的信息存储在一个名为Coin的公共类中,它看起来像这样:
public class Coins {
@SerializedName("Algorithm")
private String mAlgorithm;
@SerializedName("CoinName")
private String mCoinName;
@SerializedName("FullName")
private String mFullName;
@SerializedName("FullyPremined")
private String mFullyPremined;
@SerializedName("Id")
private String mId;
@SerializedName("ImageUrl")
private String mImageUrl;
@SerializedName("Name")
private String mName;
@SerializedName("PreMinedValue")
private String mPreMinedValue;
@SerializedName("ProofType")
private String mProofType;
@SerializedName("SortOrder")
private String mSortOrder;
@SerializedName("Sponsored")
private Boolean mSponsored;
@SerializedName("Symbol")
private String mSymbol;
@SerializedName("TotalCoinSupply")
private String mTotalCoinSupply;
@SerializedName("TotalCoinsFreeFloat")
private String mTotalCoinsFreeFloat;
@SerializedName("Url")
private String mUrl;
public String getAlgorithm() {
return mAlgorithm;
}
public void setAlgorithm(String Algorithm) {
mAlgorithm = Algorithm;
}
public String getCoinName() {
return mCoinName;
}
public void setCoinName(String CoinName) {
mCoinName = CoinName;
}
public String getFullName() {
return mFullName;
}
public void setFullName(String FullName) {
mFullName = FullName;
}
public String getFullyPremined() {
return mFullyPremined;
}
public void setFullyPremined(String FullyPremined) {
mFullyPremined = FullyPremined;
}
public String getId() {
return mId;
}
public void setId(String Id) {
mId = Id;
}
public String getImageUrl() {
return mImageUrl;
}
public void setImageUrl(String ImageUrl) {
mImageUrl = ImageUrl;
}
public String getName() {
return mName;
}
public void setName(String Name) {
mName = Name;
}
public String getPreMinedValue() {
return mPreMinedValue;
}
public void setPreMinedValue(String PreMinedValue) {
mPreMinedValue = PreMinedValue;
}
public String getProofType() {
return mProofType;
}
public void setProofType(String ProofType) {
mProofType = ProofType;
}
public String getSortOrder() {
return mSortOrder;
}
public void setSortOrder(String SortOrder) {
mSortOrder = SortOrder;
}
public Boolean getSponsored() {
return mSponsored;
}
public void setSponsored(Boolean Sponsored) {
mSponsored = Sponsored;
}
public String getSymbol() {
return mSymbol;
}
public void setSymbol(String Symbol) {
mSymbol = Symbol;
}
public String getTotalCoinSupply() {
return mTotalCoinSupply;
}
public void setTotalCoinSupply(String TotalCoinSupply) {
mTotalCoinSupply = TotalCoinSupply;
}
public String getTotalCoinsFreeFloat() {
return mTotalCoinsFreeFloat;
}
public void setTotalCoinsFreeFloat(String TotalCoinsFreeFloat) {
mTotalCoinsFreeFloat = TotalCoinsFreeFloat;
}
public String getUrl() {
return mUrl;
}
public void setUrl(String Url) {
mUrl = Url;
}
}
所以最后我的映射响应类看起来像:
public class CoinsListResponse {
private boolean success;
private List<Coins> coinsList;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public List<Coins> getCoinsList() {
return coinsList;
}
public void setCoinsList(List<Coins> coinsList) {
this.coinsList = coinsList;
}
}
我还没有添加@Serialized符号,因为我不知道用它注释的关键字。
我的Retrofit服务界面有一个方法可以将结果返回到此地图:
public interface CoinService {
@NonNull
@POST
Observable<CoinsListResponse> getCoinList();
}
因为我是Retrofit和RxAndroid的首发,可能有更好的方法来做到这一点,我不知道。如果是这样,请同时提及!!我试图了解这几天,但也无法找到任何答案。
请帮助!!
答案 0 :(得分:0)
更改
private List<Coins> coinsList;
到
@SerializedName("Data")
private Map<String, Coins> coinsByName;
然后,您可以使用coinsByName.values()
或致电例如coinsByName.get("LTC")