无法用Android中的json文件内容填充列表

时间:2015-07-23 08:09:12

标签: java android arrays json

我正在尝试将json文件的内容添加到arraylist。我之前已经做了几次但是我无法弄清楚在这个特殊情况下出了什么问题,我无法在arraylist中添加任何东西。

所以我有一个:

private List<Person> persons = new ArrayList<Person>();

这就是我从资源文件夹(from this answer)加载json文件的方式:

public String loadJSONFromAsset() {
        String json = null;
        try {
            // json file name
            InputStream is = this.getAssets().open("file.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            json = new String(buffer, "UTF-8");
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }

撰写

public void writeJson(){
    try {
        JSONObject obj = new JSONObject(loadJSONFromAsset());
        JSONArray response = new JSONArray(loadJSONFromAsset());


        for (int i = 0; i < response.length(); i++) {
            Person person = new Person();
            JSONObject jo_inside = response.getJSONObject(i);

            Log.d(TAG, jo_inside.getString("firstName"));

            //Add values in `ArrayList`
            person.setName(obj.getString("firstName"));
            person.setAge(obj.getString("age"));
            person.setPhoto(obj.getInt("id"));
            // Add to the array
            persons.add(person);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

当我尝试打印人员阵列的内容以进行测试时,我没有使用上述方法。但是,如果我插入这样的人:

persons.add(new Person("John", "23 years old", 1)); 

然后它将被添加到数组中。

我认为某处有一个小错误,但我无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

您的代码中需要进行少量更正。检查代码块中的注释。

    public void writeJson(){
    try {
        //this line is not needed, since you are reading array & not not json object 
        //JSONObject obj = new JSONObject(loadJSONFromAsset());
        JSONArray response = new JSONArray(loadJSONFromAsset());

        for (int i = 0; i < response.length(); i++) {
            JSONObject jo_inside = response.getJSONObject(i);

            Log.d(TAG, jo_inside.getString("firstName"));

            //Add values in `ArrayList`
            //for setting the values use object read from response array 
            Person person = new Person();
            person.setName(jo_inside.getString("firstName"));
            person.setAge(jo_inside.getString("age"));
            person.setPhoto(jo_inside.getInt("id"));
            // Add to the array
            persons.add(person);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    } 
}

这将解决您的问题。