我在改造方面遇到问题。
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)
{"BTC":{"USD":6731.55,"EUR":5716.11,"PLN":24359.79},"ETH":{"USD":244.41,"EUR":207.73,"PLN":905.73},"LSK":{"USD":3.42,"EUR":2.91,"PLN":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 retrof java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
最佳答案
更改Call<List<CryptoPrices>>
至Call<Map<String,CryptoPrices>>
。响应不是列表,而是字符串(如 ”BTC”
)到数据的映射。
关于java - Android 改造预计为 BEGIN_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52451662/