使用API的Android JSON解析



我很难弄清楚如何正确解析这个JSON文件。

{
    "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
 }

我试图只获取一些元素"date"、"description"、"title"、"diggs"、"link"one_answers"digg_id"。每当我尝试解析它时,它在listView中不起作用,什么都不会显示,但如果我在GetMethod类中使用String,它会将整个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;
    }
    }

只是建议一种简单的方法来完成所需。。。有关更多详细信息,请参阅并学习教程。。。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();
        }

在代码日期中,一个字符串类型,当存储在"DiggItemdi"中时,您使用的是一个整数值c.getInt("date")。此外,digg_id不能是Integer,因为作为响应,digg_id的值是字母数字的组合,因此您也可以在此处使用String。

首先创建HTTP_HANDLER_class。。。

public class HttpHandler {
private static final String TAG = HttpHandler.class.getSimpleName();
public HttpHandler() {
}
public String makeServiceCall(String reqUrl) {
    String response = null;
    try {
        URL url = new URL(reqUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        // read the response
        InputStream in = new BufferedInputStream(conn.getInputStream());
        response = convertStreamToString(in);
    } catch (MalformedURLException e) {
        Log.e(TAG, "MalformedURLException: " + e.getMessage());
    } catch (ProtocolException e) {
        Log.e(TAG, "ProtocolException: " + e.getMessage());
    } catch (IOException e) {
        Log.e(TAG, "IOException: " + e.getMessage());
    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    }
    return response;
}
private String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line).append('n');
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}
}

然后创建一个私有类来获取数据

private class GetContacts extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(Index.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();
    }
    @Override
    protected Void doInBackground(Void... arg0) {
        HttpHandler sh = new HttpHandler();
        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url);
        Log.e(TAG, "Response from url: " + jsonStr);
        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);
                // Getting JSON Array node
                JSONArray contacts = jsonObj.getJSONArray("data");
                // looping through All Contacts
                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject JO = (JSONObject) contacts.get(i);
                    /*if(JO.has("devices"))
                    {
                        Toast.makeText(Index.this,"No Data Found",Toast.LENGTH_LONG).show();
                    }*/
                    JSONObject jb = (JSONObject) JO.get("devices");
                    String id = jb.getString("user_id");
                    String trip_id = jb.getString("id");
                    String product = jb.getString("product");
                    String name = jb.getString("devices");
                    String start_geo = jb.getString("address");
                    String end_lat = jb.getString("Latitude");
                    String end_long = jb.getString("longitude");
                    //String gender = jb.getString("pointtopoint_estimate_id");

                    HashMap<String, String> contact = new HashMap<>();
                    // adding each child node to HashMap key => value
                    contact.put("id", id);
                    contact.put("trip_id", trip_id);
                    contact.put("product", product);
                    contact.put("name", name);
                    contact.put("start_geo", start_geo);
                    contact.put("end_lat",end_lat );
                    contact.put("end_long",end_long );
                    // adding contact to contact list
                    contactList.add(contact);
                }
            } catch (final JSONException e) {
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Your Internet Connection is Weak. Try Reloading Your Page",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
            }
        } else {
            Log.e(TAG, "Couldn't get json from server.");
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(),
                            "Check Your Internet Connection",
                            Toast.LENGTH_LONG)
                            .show();
                }
            });
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
}
}

相关内容

  • 没有找到相关文章

最新更新