我对改造有意见。
CryptoCompareClient.java
public interface CryptoCompareClient {
@GET("/data/pricemulti")
Call<List<CryptoPrices>> multiCryptoPrices(@Query("fsyms") String crypto,
@Query("tsyms") String currency);
@GET("/data/price")
Call<CryptoPrices> singleCryptoPrice(@Query("fsym") String crypto,
@Query("tsyms") String currency);
}响应JSON: (https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,LSK&tsyms=USD,EUR,PLN)
{“美元”:6731.55,“欧元”:5716.11,“欧元”:24359.79},“欧元”:244.41,“欧元”:207.73,“欧元”:905.73},“欧元”:{“美元”:3.42,“欧元”:2.91,“欧元”:12.49}}
RetrofitInterface.java
public class RetrofitInterface {
Retrofit retrofit = RetrofitClientInstance.getRetrofitInstance();
private static final String CURRENCY="USD,EUR,PLN,BTC";
public void multiCrypto(String names){
CryptoCompareClient client=retrofit.create(CryptoCompareClient.class);
Call<List<CryptoPrices>> call=client.multiCryptoPrices(names,CURRENCY);
call.enqueue(new Callback<List<CryptoPrices>>() {
@Override
public void onResponse(Call<List<CryptoPrices>> call, Response<List<CryptoPrices>> response) {
}
@Override
public void onFailure(Call<List<CryptoPrices>> call, Throwable t) {
Log.d("MyCrypto", "fail retrof "+t);
}
});
}}
Logcat
D/MyCrypto: fail java.lang.IllegalStateException:预期BEGIN_ARRAY,但在第1列2 path $上是BEGIN_OBJECT
发布于 2018-09-21 22:54:18
将Call<List<CryptoPrices>>更改为Call<Map<String,CryptoPrices>>。响应不是列表,而是指向数据的字符串映射(如”BTC”)。
发布于 2018-09-21 22:53:23
您的API方法:
@GET("/data/pricemulti")
Call<List<CryptoPrices>> multiCryptoPrices(@Query("fsyms") String crypto,
@Query("tsyms") String currency);期望CryptoPrices的列表为数组[...],并且您正在提供一个对象{...}。
祝你的密码客户好运!
https://stackoverflow.com/questions/52451662
复制相似问题