2013-09-09 2 views
3

Я пробовал разобрать данные JSON с "https://api.instagram.com/v1/media/popular?client_id=" + clientId; или любой другой URL, в тоннах разных способов! Используется пара JSONParsers, учебники, читатели .. все, но все равно не может ничего извлечь из этих URL-адресов. Теперь я использую библиотеку Volley и все еще не могу заставить ее работать, вот мой код и все, что вам нужно, если у кого есть какие-то идеи, пожалуйста, поделитесь ими.анализ данных JSON с использованием Volley в Android

public void LoadPictures() { 
    mRequestQueue = Volley.newRequestQueue(this); 
    mRequestQueue.add(new JsonObjectRequest(urlInst, null, 
      new Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         parseJSON(response); 
        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      }, new ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
     } 
    })); 

это мой метод parseJSON:

private void parseJSON(JSONObject json) throws JSONException{  
    // JSONObject value = json.getJSONObject("value"); 
JSONArray items = json.getJSONArray("data"); 
for(int i=0;i<items.length();i++) { 
    JSONObject c=(JSONObject) items.get(i); 
     JSONObject user = c.getJSONObject("user"); 
    String name= user.getString("username"); 
    JSONObject img=c.getJSONObject("images"); 
     JSONObject thum=img.getJSONObject("thumbnail"); 
     String urlOfPic = thum.getString("url"); 
     PhotoInst photoData=new PhotoInst (i, urlOfPic, name); 
     photos.add(photoData); 
    } 

это данные JSON я должен был получить:

"data": [{ 
    "type": "image", 
    "users_in_photo": [], 
    "filter": "Gotham", 
    "tags": [], 
    "comments": { ... }, 
    "caption": { 
     "created_time": "1296656006", 
     "text": "ãã¼ãâ¥ã¢ããªå§ãã¦ä½¿ã£ã¦ã¿ãã(^^)", 
     "from": { 
      "username": "cocomiin", 
      "full_name": "", 
      "type": "user", 
      "id": "1127272" 
     }, 
     "id": "26329105" 
    }, 
    "likes": { 
     "count": 35, 
     "data": [{ 
      "username": "mikeyk", 
      "full_name": "Kevin S", 
      "id": "4", 
      "profile_picture": "..." 
     }, {...subset of likers...}] 
    }, 
    "link": "http://instagr.am/p/BV5v_/", 
    "user": { 
     "username": "cocomiin", 
     "full_name": "Cocomiin", 
     "profile_picture": "http://distillery.s3.amazonaws.com/profiles/profile_1127272_75sq_1296145633.jpg", 
     "id": "1127272" 
    }, 
    "created_time": "1296655883", 
    "images": { 
     "low_resolution": { 
      "url": "http://distillery.s3.amazonaws.com/media/2011/02/01/34d027f155204a1f98dde38649a752ad_6.jpg", 
      "width": 306, 
      "height": 306 
     }, 
     "thumbnail": { 
      "url": "http://distillery.s3.amazonaws.com/media/2011/02/01/34d027f155204a1f98dde38649a752ad_5.jpg", 
      "width": 150, 
      "height": 150 
     }, 
     "standard_resolution": { 
      "url": "http://distillery.s3.amazonaws.com/media/2011/02/01/34d027f155204a1f98dde38649a752ad_7.jpg", 
      "width": 612, 
      "height": 612 
     } 
    }, 
    "id": "22518783", 
    "location": null 
}, 

когда я пытаюсь положить случайные Тосты чтобы увидеть, где находится проблема, Я вижу, что onResponse в моем методе LoadPictures не вызван вообще? Где я терпеть неудачу? я просто наблюдаю за чем-то маленьким или чем-то еще?

ответ

3

@Mate - Как видно из вашего json, вы получаете JsonArray i.e "data". Следовательно, измените Listener на Listener < JSONArray>, который гарантирует, что он вернет объект JSONArray. В результате ваш onResponse теперь станет,

@Override 
public void onResponse(JSONArray response) { 
try { 
     parseJSON(response); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Сообщите мне, если это работает.

0

Несколько вещей, которые вы должны проверять первый:

Вы уверены, что вы следующий в манифесте?

<uses-permission android:name="android.permission.INTERNET" /> 

Instagram требует своего рода API-ключа/аутентификации. Вы уверены, что предоставляете это?

Является ли ваш ErrorListener печать трассировки стека? Если да, можете ли вы предоставить его?

Вот где я начну.

+0

да ко всем выше, за исключением слушателя ошибок, это даже не срабатывает. –

0

может это поможет вам response = response.substring(5); делает, чтобы удалить первые 5 символов, как data: и продолжить JSONArray jsonArray = new JSONArray(response);