-1

I have a problem getting data from this api. I can request the first parts of the data but after the "quotes" I can not fetch the data and I need to fetch the price.

JSON EXAMPLE

{
"data": {
    "1": {
        "id": 1, 
        "name": "Bitcoin", 
        "symbol": "BTC", 
        "website_slug": "bitcoin", 
        "rank": 1, 
        "circulating_supply": 17008162.0, 
        "total_supply": 17008162.0, 
        "max_supply": 21000000.0, 
        "quotes": {
            "USD": {
                "price": 9024.09, 
                "volume_24h": 8765400000.0, 
                "market_cap": 153483184623.0, 
                "percent_change_1h": -2.31, 
                "percent_change_24h": -4.18, 
                "percent_change_7d": -0.47
            }
        }, 
        "last_updated": 1525137271
    }, 

REQUEST CODE

try {

    JSONObject jsonObject = response.getJSONObject("data");
    JSONArray jsonArray = jsonObject.names();
    Log.e(TAG,jsonArray.toString());
    for(int i=0;i<jsonArray.length();i++){

        JSONObject getObjectFromJsonArray=jsonObject.getJSONObject(jsonArray.getString(i));
        CoinMarketAPI coin=new CoinMarketAPI();

        coin.setId(getObjectFromJsonArray.getString("id"));
        coin.setName(getObjectFromJsonArray.getString("name"));
        coin.setSymbol(getObjectFromJsonArray.getString("symbol"));
        coin.setWebsite_slug(getObjectFromJsonArray.getString("website_slug"));
        coin.setRank(getObjectFromJsonArray.getString("rank"));
        coin.setCirculating_supply(getObjectFromJsonArray.getString("circulating_supply"));
        coin.setTotal_supply(getObjectFromJsonArray.getString("total_supply"));
        coin.setQuotes(getObjectFromJsonArray.getString("quotes"));

        if (jsonObject.has("price")){coin.setPrice(getObjectFromJsonArray.getString("price"));
        }else{
            Log.d(TAG, "No price");
        }

        firstlist.add(coin);
    }
}

NOTE

I put the coin in a if statement to see what is happening the log output I get is "no price"

So for some reason my code does not think there is data in price?

Chris Stillwell
  • 10,266
  • 10
  • 67
  • 77
NoobAndroid
  • 86
  • 4
  • 10

1 Answers1

0

You're not looking for "price" correctly. Your if statement is looking for price under "data" it needs to look for it under "USD".

You should do something like this instead

JSONObject usd = getObjectFromJsonArray.getJSONObject("quotes").getJSONObject("USD");

if (usd.has("price")){
    coin.setPrice(usd.getDouble("price"));
}else{
    Log.d(TAG, "No price");
}
Chris Stillwell
  • 10,266
  • 10
  • 67
  • 77