0

を取得するコードを取得しましたが、 1 つしか含まれていないコードを取得JSONArraysしようとすると、empty が返されます。JSONObjectJSONArrayJSONArray

たとえば、これからデータを取得する必要がある場合JSONObject:

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

{"events":[]}として取得します。これは、JSONArrays が含まれていないことを意味しますJSONObject[]また、この場合の長さはJSONObject0 です。ただし、どのような種類の もスローしません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に単一配列の文字列を返すようにしただけで、opptunti.getString()のものをjsonEvent.getString()に置き換える必要がありました)。サーバーの応答を待つためにUIスレッドをブロックしている可能性があることを除けば、問題なく機能しました。

私の推測では、問題は、間違ったURLにアクセスしている、パラメータが間違っている、またはそのようなものであるということです。

于 2012-11-29T21:34:40.233 に答える