-1

の文字 1 で入力の終了

リストビューを作成し、配列の目的でJSONObjectを使用していますが、このエラーが発生しました。修正方法がわかりません。プログラムを実行したときに例外が発生する場所さえわかりません。プログラムは単に終了し、結果が表示されません。これは私のJavaファイルです誰かが例外を見つけてくれることを願っています

@Override
            protected ArrayList<TodayDetails> doInBackground(Void... params) {
                    try {
                            // Create a new HTTP Client
                            DefaultHttpClient defaultClient = new DefaultHttpClient();
                            // Setup the get request
                            HttpGet httpGetRequest = new HttpGet("http://api.androidhive.info/contacts");

                            // Execute the request in the client
                            HttpResponse httpResponse = defaultClient
                                            .execute(httpGetRequest);
                            // Grab the response
                            BufferedReader reader = new BufferedReader(
                                            new InputStreamReader(httpResponse.getEntity()
                                                            .getContent(), "UTF-8"));
                            String result = reader.readLine();
                            JSONObject object = new JSONObject(result);
                            JSONArray Jarray = object.getJSONArray("contact");
                            for (int i = 0; i < Jarray.length(); i++) {
                               JSONObject Jasonobject = Jarray.getJSONObject(i);

                                    today_details = new TodayDetails();
                                    today_details.setId(Jasonobject.getInt("id"));
                                    today_details.setName(Jasonobject.getString("name"));
                                    today_details.setEmail(Jasonobject.getString("email"));
                                    today_details.setAddress(Jasonobject.getString("address"));
                                    today_details.setGender(Jasonobject.getString("gender"));
                                    today_details.setPhone(Jasonobject.getInt("phone"));
                                    today_details.setHome(Jasonobject.getInt("home"));
                                    today_details.setMobile(Jasonobject.getInt("mobile"));
                                    today_details.setOffice(Jasonobject.getInt("office"));

                                    search_results.add(today_details);
                       }
        } catch(Exception e){
           e.printStackTrace();
        }
        return search_results;
    }
    protected void onPostExecute(ArrayList<TodayDetails> search_results) {
        if(WeatherToday.this.pd != null){
            WeatherToday.this.pd.dismiss();
        }
        ArrayList<TodayDetails> today_details = search_results;
        list_view_main = (ListView)findViewById(R.id.todaylist);
        list_view_main.setAdapter(new TodayListAdapter(getApplicationContext(), today_details));
        }
    };
}
4

2 に答える 2

2

サニタリーチェック JSONで作業する場合

JSON 側のエラーを確認します。これは、json の検証に役立つリンクです。

Jsonlintこのリンクを試して、JSON を検証してください。JSON をコピー/貼り付けして、有効かどうかを確認してください。

有効な場合は、ここに投稿してください。さらに役立つ場合があります。

有効でない場合...まあ、すべてがうまくいくでしょう:-)

コードチェック

  1. 行ごとに読み取って StringBuilder に完全な json を追加します。
  2. toString を呼び出し、結果の JSOn を String として JSONObject obj=new JsonObject(String) 関数に渡します。
    1. したがって、例外が発生した場合は、json に問題がある場合は、上記のリンクから確認してください。
    2. 正常に動作する場合は、配列、オブジェクトの配列などの jsonObject を繰り返します。

これが役に立つことを願っています

アップデート

Gson ライブラリの使用は、json が大きくなるにつれて非常に便利です。本質的に抽象化されたすべてのものを処理し、json を取得または作成するための静的メソッドを提供します。

これは、Gsonライブラリを使用してjson解析用に作成したプログラムの要点です。

Gson デモ プログラム

ヘルプ記事

ブログのヘルプ

Gson公式

于 2013-04-18T05:26:56.467 に答える
1

最初にわかるのは、「連絡先」ではなく「連絡先」が必要なことです。

 JSONArray Jarray = object.getJSONArray("contact");

から:

{
"contacts": [
    {
            "id": "c200",

また、JSON にも天気に関する情報は含まれていません。そのため、明らかに失敗する可能性のあるものがたくさんあります。

編集:天気のビットを取り除いたようです。へー

EDIT 2:しかし、logcatの出力が天気を気にすることを印刷しているようです。

編集 3 : JSON の1 行だけを読んでいます{。それは適切な JSON ではありません。完全な出力を読み取ります。

   String result = reader.readLine();
于 2013-04-18T04:12:16.647 に答える