在android中显示json数据时出错查找错误

时间:2014-11-16 15:22:08

标签: json

在第三个log.d(“Lee”,“working”)之后显示错误org.json.JSONException和org.json.typemismatch以及org.json.getJSONObject。

这是将json数据转换为适用于android的正确格式列表视图的代码。

public class FlowerJSONParser {

public static List<Flower> parserFeed(String content)

{

try 
{

            Log.d("Lee", "working");

            JSONArray ar = new JSONArray(content);

            Log.d("Lee", "working");

            List<Flower> flowerList = new ArrayList<>();

            for(int i=0; i< ar.length(); i++)

            {

                Log.d("Lee", "working");

                JSONObject obj = ar.getJSONObject(i);

                Log.d("Lee", "working");

                Flower flower = new Flower();

                Log.d("Lee", "working");

                flower.setId(obj.getString("id"));
                flower.setNotes(obj.getString("notes"));


                flowerList.add(flower);
            }
            return flowerList;
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

    }
}

1 个答案:

答案 0 :(得分:0)

你正试图从JSONArray“ar”获取JSONObject。因此,您必须确保数组中的所有元素都是JSONObject。如果没有,则在将元素转换为JSONObject期间必定存在异常。

请注意,JSONArray中的元素可以是任何主要类型(int / long / boolean ...),包装类(Integer / Long / Boolean ...),String,JSONObject甚至是另一个JSONArray。 因此,您必须在ar.getJSONObject(i)之前确认元素的类型。

另一种用法是: 用ar.optJSONObject(i)替换ar.getJSONObject(i)。 这样,如果元素不是JSONObject,则会得到null而不是异常。