У меня проблема с анализом с использованием модифицированного вызова. это не повторяющийся вопрос. Я пытаюсь слишком много гуглить и пробую много решений, но в моем случае это не работает. поэтому, пожалуйста, не голосуйте против этого вопроса.
ошибка
05-04 04:18:48.918 5290-5290/nexus.com.demogrph E/Error: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
это мои данные ответа
{
"market_cap_by_available_supply": [
[
1367174841000,
1500517590
],
[
1367261101000,
1575032004
]
],
"price_btc": [
[
1367174841000,
1
],
[
1367261101000,
1
]
],
"price_usd": [
[
1367174841000,
135.3
],
[
1367261101000,
141.96
]
],
"volume_usd": [
[
1367174841000,
0
],
[
1367261101000,
0
]
]
}
вот что я пытаюсь назвать API, используя Retrofit.
ApiClient.java
public class ApiClient {
public static final String URL = "https://graphs2.coinmarketcap.com/";
public static Retrofit RETROFIT = null;
// https://api.coinmarketcap.com/v2/ticker/
public static Retrofit getClient(){
if(RETROFIT==null){
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
RETROFIT = new Retrofit.Builder()
.baseUrl(URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return RETROFIT;
}
}
ApiService.interface
public interface ApiService {
@GET("currencies/{id}")
Call<List<PriceDatum>> getPriceData(@Path("id") String id);
}
PriceDatum.java
class PriceDatum implements Serializable {
@SerializedName("market_cap_by_available_supply")
@Expose
private List<Integer> marketCapByAvailableSupply = null;
@SerializedName("price_btc")
@Expose
private List<Integer> priceBtc = null;
@SerializedName("price_usd")
@Expose
private List<Integer> priceUsd = null;
@SerializedName("volume_usd")
@Expose
private List<Integer> volumeUsd = null;
public List<Integer> getMarketCapByAvailableSupply() {
return marketCapByAvailableSupply;
}
public void setMarketCapByAvailableSupply(List<Integer> marketCapByAvailableSupply) {
this.marketCapByAvailableSupply = marketCapByAvailableSupply;
}
public List<Integer> getPriceBtc() {
return priceBtc;
}
public void setPriceBtc(List<Integer> priceBtc) {
this.priceBtc = priceBtc;
}
public List<Integer> getPriceUsd() {
return priceUsd;
}
public void setPriceUsd(List<Integer> priceUsd) {
this.priceUsd = priceUsd;
}
public List<Integer> getVolumeUsd() {
return volumeUsd;
}
public void setVolumeUsd(List<Integer> volumeUsd) {
this.volumeUsd = volumeUsd;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
List<PriceDatum> datalist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApiService apiService =
ApiClient.getClient().create(ApiService.class);
Call<List<PriceDatum>> call = apiService.getPriceData("bitcoin");
call.enqueue(new Callback<List<PriceDatum>>() {
@Override
public void onResponse(Call<List<PriceDatum>> call, Response<List<PriceDatum>> response) {
datalist = response.body();
Log.d("data", "Number of movies received: " + datalist.size());
}
@Override
public void onFailure(Call<List<PriceDatum>> call, Throwable t) {
Log.e("Error",t.getMessage());
}
});
}
}