2015-10-01 3 views
0

Я попытался получить некоторые данные из API песни. Я хочу получить теги из песни.Как получить данные из API (JSON) в android?

Здесь JSON:

{"track": 
    {"name":"Let It Happen", 
    "url":"http://www.last.fm/music/Tame+Impala/_/Let+It+Happen", 
    "duration":"469000", 
    "streamable":{"#text":"0","fulltrack":"0"}, 
    "listeners":"150111", 
    "playcount":"758518", 
    "artist":{"name":"Tame Impala","mbid":"63aa26c3-d59b-4da4-84ac-716b54f1ef4d","url":"http://www.last.fm/music/Tame+Impala"}, 
    "toptags": 
     {"tag":[ 
      {"name":"indie","url":"http://www.last.fm/tag/indie"}, 
      {"name":"psychedelic","url":"http://www.last.fm/tag/psychedelic"}, 
      {"name":"Psychedelic Rock","url":"http://www.last.fm/tag/Psychedelic+Rock"}, 
      {"name":"2015","url":"http://www.last.fm/tag/2015"}, 
      {"name":"electronic","url":"http://www.last.fm/tag/electronic"} 
      ] 
     }, 
    "wiki": 
     {"published":"11 Mar 2015, 08:59","summary":"Let It Happen is the opening track and first song revealed from Tame Impala's upcoming third album, Currents. <a href=\"http://www.last.fm/music/Tame+Impala/_/Let+It+Happen\">Read more on Last.fm</a>.","content":"Let It Happen is the opening track and first song revealed from Tame Impala's upcoming third album, Currents. <a href=\"http://www.last.fm/music/Tame+Impala/_/Let+It+Happen\">Read more on Last.fm</a>. User-contributed text is available under the Creative Commons By-SA License; additional terms may apply."} 
    } 
} 

Из того, что я узнал, я использую этот код, чтобы разобрать его

private static ArrayList<String> parseTagsAPI(final String response) 
{ 
    ArrayList<String> tagTemp = new ArrayList<String>(); 
    try 
    { 
     String tag="", logtag="test, test2"; 

     JSONObject jsonObject = new JSONObject(response); 
     if (jsonObject.has("track")) 
     { 
      JSONObject jsonTrack = jsonObject.getJSONObject("track"); 
      Log.d("API (tag)", "track"); 

      if (jsonObject.has("toptags")) 
      { 
       JSONArray jsonArray = jsonTrack.getJSONObject("toptags").getJSONArray("tag"); 
       Log.d("API (tag)", "track > album > toptags > tag(array)"); 

       for (int i = 0; i < jsonArray.length(); i++) 
       { 
        if (jsonArray.getJSONObject(i).has("name")) 
        { 
         JSONObject tagArray = jsonArray.getJSONObject(i).getJSONObject("name"); 
         tag = tagArray.optString("name"); 

         logtag += (tag + ", "); 
         Log.d("API (tag)", "tags : " + tag); 
        } 
        tagTemp.add(tag); 
       } 
      } 
     } 
     Log.d("API (tag)", "Logtag : "+logtag); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return new ArrayList<String>(); 
    } 
    return tagTemp; 
} 

Я положил несколько журналов, чтобы отметить прогресс, но это только показать 2 бревна:

  • Log.d («API (tag)», «track»);
  • Log.d ("API (tag)", "Logtag:" + logtag); -> этот var пуст

, что означает, что мой второй if не работает. Кто-нибудь знает, почему это происходит?

+0

выкладываю полный ответ JSon – Sony

+0

JSON не является полным –

ответ

1

Это неправильно здесь:

JSONObject tagArray = jsonArray.getJSONObject(i).getJSONObject("name"); 
tag = tagArray.optString("name"); 

вы должны сделать вместо этого:

tag = jsonArray.getJSONObject(i).getString("name"); 

или

tag = jsonArray.getJSONObject(i).optString("name"); 

изменить Также это:

if (jsonObject.has("toptags")) 

в

if (jsonTrack.has("toptags")) 
+0

спасибо, сэр. Это было мое плохое, просто обыскайте его часами и отчаянно XD высоко оценил –

1
You're looking for the wrong tag - it's just a typo. 

    private static ArrayList<String> parseTagsAPI(final String response) 
{ ArrayList<String> tagTemp = new ArrayList<String>(); 
    try 
    { String tag="", logtag="test, test2"; 

     JSONObject jsonObject = new JSONObject(response); 
     if (jsonObject.has("track")) 
     { JSONObject jsonTrack = jsonObject.getJSONObject("track"); 
      Log.d("API (tag)", "track"); 

      if (jsonObject.has("toptags")) 
      { JSONArray jsonArray = jsonTrack.getJSONObject("toptags").getJSONArray("tag"); 
       Log.d("API (tag)", "track > album > toptags > tag(array)"); 

Обратите внимание, что вы ищете jsonObject.has("toptags"), а не jsonTrack.has("toptags");

+0

спасибо, сэр, это было глупо TT я искать его в течение нескольких часов и получил отчаянный ха-ха. Благодаря!! –