0

我得到了得到的代码,JSONArrays但是当我尝试得到JSONObject只包含一个的代码时,JSONArray它给了我空白JSONArray

例如,如果我需要从中获取数据JSONObject

{"events":[{"start":1357714800,"end":1357736400,"name":"Example1","description":""}]}

我得到{"events":[]}as JSONObject[]这意味着它不包含任何 JSONArrays。在这种情况下,长度JSONObject也是 0。但它不会抛出任何类型的Exceptions.

但如果JSONObject包含多个JSONArrays这样的:

{"events":[{"start":1357714800,"end":1357736400,"name":"Example1","description":""},{"start":1357714600,"end":1357736500,"name":"Example2","description":""},{"start":1357514800,"end":1357536400,"name":"Example3","description":""}]}

然后我的代码完美运行。

这是我用来解析 JSON 的代码:

private void getObjects(String url) throws JSONException, Exception {
        JSONObject jsonObject = new JSONObject(new NetTask().execute(url).get());
        JSONArray job1 = jsonObject.getJSONArray("events");
        System.out.println(jsonObject.toString());
        System.out.println("JOB1 LENGTH: "+job1.length());
        for (int i = 0; i < job1.length(); i++) {
            JSONObject jsonEvent = job1.getJSONObject(i);
            int start = jsonEvent.getInt("start");
            int end = jsonEvent.getInt("end");
            String name = jsonEvent.getString("name");
            String description = jsonEvent.getString("description");
        }
    }

    public class NetTask extends AsyncTask<String, Integer, String>
    {
        @Override
        protected String doInBackground(String... params)
        {
            String jsonText = "";
            BufferedReader reader = null;
            try {
                URL url = new URL(params[0]);
                reader = new BufferedReader(new InputStreamReader(url.openStream()));
                StringBuffer buffer = new StringBuffer();
                int read;
                char[] chars = new char[1024];
                while ((read = reader.read(chars)) != -1) {
                    buffer.append(chars, 0, read);
                }

                jsonText = buffer.toString();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            return jsonText;
        }
    }

我错过了什么或者这是正常的行为吗?

4

1 回答 1

1

我尝试了你给定的代码(虽然我只是让 AsyncTask 只返回单数组字符串,并且不得不用 jsonEvent.getString() 替换 opptunti.getString() 的东西)。它工作得很好,除了您可能阻止 UI 线程等待服务器响应之外。

我的猜测是问题在于您点击了错误的 URL,参数错误或类似的东西。

于 2012-11-29T21:34:40.233 回答