2012-04-01 2 views
0

Мне сложно определить, как правильно разбирать этот файл JSON.Android JSON Parsing с использованием API

{ 
    "count": 10, 
    "timestamp": 1333243153, 
    "total": 100, 
    "diggs": [ 
     { 
      "date": 1333243146, 
      "item": { 
       "status": "upcoming", 
       "container": { 
        "name": "Politics", 
        "short_name": "politics" 
       }, 
       "description": "Major steps toward the disestablishment of Norway's state church, the (Lutheran) Church of Norway, were passed by the government on March 16 in its weekly session with King Harald V.", 
       "title": "National Secular Society - Norway continues the long process of disestablishing the Lutheran Church", 
       "submit_date": 1333206325, 
       "media": 0, 
       "diggs": 5, 
       "comments": 0, 
       "topic": { 
        "name": "Politics", 
        "short_name": "politics" 
       }, 
       "shorturl": { 
        "short_url": "http://digg.com/news/politics/national_secular_society_norway_continues_the_long_process_of_disestablishing_the_lutheran_church", 
        "view_count": 0 
       }, 
       "promote_date": null, 
       "link": "http://www.secularism.org.uk/news/2012/03/norway-continues-the-long-process-of-disestablishing-the-lutheran-church", 
       "href": "http://digg.com/news/politics/national_secular_society_norway_continues_the_long_process_of_disestablishing_the_lutheran_church", 
       "id": "20120331150525:56935e86-2dbf-4831-ad60-50def7781e68" 
      }, 
      "user": { 
       "name": "ghelms", 
       "links": [], 
       "registered": 1158007588, 
       "profileviews": 0, 
       "fullname": "Gary Helms", 
       "icon": "http://cdn2.diggstatic.com/user/614412/l.2001177284.png" 
      }, 
      "digg_id": "20120401011907:5cf92ee9-e915-4358-b14f-cf140b760469" 
     }, 
    ], 
    "offset": 0 
} 

Я пытаюсь получить лишь некоторые из элементов «дата», «описание», «название», «Диггс», «связь» и «digg_id». Всякий раз, когда я пытаюсь разобрать, это не будет работать в ListView, ничего не появляется, но если я использую String в моем классе GetMethod, он проанализирует весь API в строке и напечатает его в порядке.

Мой код:

public DiggItemList lastDigg() throws Exception { 
    ArrayList<HashMap<String,DiggItem>> diggsList = new ArrayList<HashMap<String, DiggItem>>(); 
    JSONArray diggs = null; 
    JSONObject json = null; 
    Intent in = getIntent(); 
    String short_name = in.getStringExtra(TAG_SHORT_NAME); 
    GetMethod get = new GetMethod(); 
    json = get.getInternetData(); 

    try { 
     diggs = json.getJSONArray("diggs"); 

      dlists = new DiggItemList(); 
      for (int i = 0; i < diggs.length(); i++) { 
       JSONObject c = diggs.getJSONObject(i); 
       String date = c.getString("date"); 
       String description = c.getString("description"); 
       String title = c.getString("title"); 
       int digg = c.getInt("diggs"); 
       String link = c.getString("link"); 
       int digg_id = c.getInt("digg_id"); 

       //JSONObject topic = c.getJSONObject("topic"); 
        //String sn = topic.getString("short_name"); 

       DiggItem di = new DiggItem(); 
       di.setDate(c.getInt("date")); 
       di.setDescription(c.getString("description")); 
       di.setTitle(c.getString("title")); 
       di.setDiggs(c.getInt("diggs")); 
       di.setLink(c.getString("link")); 
       di.setDigg_id(c.getString("digg_id")); 
        dlists.add(di); 
        /* 
       if (sn.equals(short_name)) { 
        dlists.add(di); 
       } 
           */ 
      } 

    }catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return dlists; 
} 

класса, чтобы получить API. (Http://services.digg.com/2.0/digg.getAll).

public class GetMethod { 

    public JSONObject getInternetData() throws Exception { 
     BufferedReader in = null; 
     String data = ""; 
     JSONObject jObj = null; 
     try { 
      HttpClient client = new DefaultHttpClient(); 
      URI website = new URI("http://services.digg.com/2.0/digg.getAll"); 
      HttpGet request = new HttpGet(); 
      request.setURI(website); 
      HttpResponse response = client.execute(request); 
      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 

      while ((line = in.readLine()) != null) { 
        sb.append(line + "\n"); 
      } 
      in.close(); 
      data = sb.toString(); 
     }finally { 
      if (in != null) { 
       try { 
        in.close(); 
       }catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     try { 
      jObj = new JSONObject(data); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 
    } 
    } 

ответ

1

Просто предлагая простой способ сделать желаемое ... Для получения более подробной информации см и изучить учебник ... https://stackoverflow.com/questions/5867544/android-json-parsing-tutorial/9742384#9742384

public void parseData throws Exception { 

      try { 
    HttpClient httpclient = new DefaultHttpClient(); 

       // Prepare a request object 
     HttpGet httpget = new HttpGet("http://services.digg.com/2.0/digg.getAll"); 

       // Execute the request 
       HttpResponse response; 
       // Get hold of the response entity 
        HttpEntity entity = response.getEntity(); 
        // If the response does not enclose an entity, there is no need 
        // to worry about connection release 

        if (entity != null) { 

         // A Simple JSON Response Read 
         // InputStream instream = entity.getContent(); 
         // String result = convertStreamToString(instream).trim(); 

         String result = EntityUtils.toString(entity); 
    JsonObject json = new JsonObject(result); 

    JSONArray diggsJsonArray = json.getJSONArray("diggs"); 

    for(int i =0;i<diggsJsonArray.length;i++) 
    { 
    JsonObject individualDiggsObj = diggsJsonArray.getJSONObject(i); 

     DiggItem di = new DiggItem(); 
        di.setDate(individualDiggsObj.getInt("date")); 
    di.setDiggId(individualDiggsObj.getString("digg_id")); 
    JSONOnejct itesmJson = new JSONOBJECT(individualDiggsObjgetJSONObject("item"); 

    //NOw Fetch and Set the values of status,title,description,, etc from the itemsJson to your collection. 

    //Similarly begin with other inner Array's and Object's if available. 
       }catch(Exception e) 
    { 
    e.printStackTrace(); 
     } 
0

В вашей дате коды типа строки, где, как и при хранении в «DiggItem di» вы используете c.getInt («дата»), который является значением Integer. Также digg_id не может быть целым, потому что в ответ значение digg_id представляет собой комбинацию буквенно-цифровых символов, чтобы вы могли также использовать String.