1

我正在尝试解析包含 JSON 对象数组的字符串,但在 API 19 (Kit-Kat) 操作系统之前不支持 org.json.JSONArray。出于显而易见的原因,我需要想办法解决这个问题。有没有更好的选择?还是我错误地使用了这种方法?

这是不断告诉我我需要 API 19 或更高版本的代码:

    protected void onPostExecute(JSONArray result) {
        pDialog.dismiss();
        try {
            // Getting JSON Array from URL
            info = new JSONArray(result);
            for(int i = 0; i < info.length(); i++){
                JSONObject c = info.getJSONObject(i);

                // Storing  JSON item in a Variable
                String title = c.getString(TAG_TITLE);
                String article = c.getString(TAG_ARTICLE);
                String timestamp = c.getString(TAG_TIMESTAMP);
                String datestring = c.getString(TAG_DATESTRING);

                // Adding value HashMap key => value
                HashMap<String, String> map = new HashMap<String, String>();
                map.put(TAG_TITLE, title);
                map.put(TAG_ARTICLE, article);
                map.put(TAG_TIMESTAMP, timestamp);
                map.put(TAG_DATESTRING, datestring);

                oslist.add(map);
                list=(ListView)findViewById(R.id.list);

                ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist,
                        R.layout.list_v,
                        new String[] { TAG_TITLE,TAG_ARTICLE, TAG_TIMESTAMP,TAG_DATESTRING }, new int[] {
                        R.id.title,R.id.article, R.id.timestamp,R.id.date_string});

                list.setAdapter(adapter);
                list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        Toast.makeText(MainActivity.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show();
                    }
                });
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

顺便说一句,我正在使用 AsyncTask 将信息放入 ListView。我有另一个类来获取网页的结果。谢谢!

4

3 回答 3

4

您正在使用的新 API 19 函数是:

info = new JSONArray(result);

既然 result 已经是一个 JSONArray,为什么还要创建另一个呢?

于 2013-11-14T21:04:34.447 回答
0

老兄试试这个框架好多了

https://code.google.com/p/google-gson/

或者

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

于 2013-11-14T19:51:47.227 回答
0

这是19API lvl下的解决方案:

首先。制作一个 Gson 对象。-->Gson gson = new Gson();

第二步是使用 StringRequest(而不是 JsonObjectRequest)将您的 jsonObj 作为字符串

获取 JsonArray 的最后一步...

YoursObjArray[] yoursObjArray = gson.fromJson(response, YoursObjArray[].class);
于 2015-10-02T15:19:16.890 回答