0

私はAndroid開発に比較的慣れておらず、最初のRESTベースのアプリを書いています。少し簡単にするために、 Android非同期HTTPクライアントを使用することを選択しました。私は現在、そのリンクのメインの「推奨される使用法」セクションを実行しているだけで、基本的には基本的な静的HTTPクライアントを作成しているだけです。与えられたコードに従っていますが、別のAPIを参照するように変更しています。問題のコードは次のとおりです。

    public void getFactualResults() throws JSONException {
    FactualRestClient.get("q=Coffee,Los Angeles", null, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(JSONArray venues) {
            // Pull out the first restaurant from the returned search results
            JSONObject firstVenue = venues.get(0);
            String venueName = firstVenue.getString("name");

            // Do something with the response
            System.out.println(venueName);

        }
    });
}

このString venueName = firstVenue.getString("name");行は現在、Eclipseでエラーをスローしています:「タイプの不一致:オブジェクトからJSONObjectに変換できません」。このエラーが発生するのはなぜですか?他のスレッドを検索した結果、getJSONObject(0)代わりに使用してみましget(0)たが、さらにエラーが発生し、Eclipseがtry/catchの使用を提案しました。チュートリアルのコードは変更していませんが、変数名とURLを除いて変更していません。何か考え/ヒント/アドバイスはありますか?

本当にありがとう。

編集:

これがonSuccessメソッドであり、提案されたtry/catchブロックを含むように変更されています。Eclipseは、firstVenueの場合は「ローカル変数が初期化されていない可能性があります」を表示しますvenueName = firstVenue.getString("name");。venueNameの場合は、同じエラーが発生した直後System.out.println(venueName); に初期化しても表示されます。これらを解決するための助けをいただければ幸いです。String venueName;JSONObject firstVenue;

public void onSuccess(JSONArray venues) {
            // Pull out the first restaurant from the returned search results
            JSONObject firstVenue;
            try {
                firstVenue = venues.getJSONObject(0);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            String venueName;
            try {
                venueName = firstVenue.getString("name");
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // Do something with the response
            System.out.println(venueName);

        }
4

4 に答える 4

1

クエリから取得しているオブジェクトを文字列に変換してから使用することができます

最終的な JSONObject jsonObject = 新しい JSONObject(stringresult);

以前に同じエラーが発生していましたが、うまくいきました。

于 2013-03-13T05:32:16.787 に答える
0

obj を json オブジェクトに変換します。

オブジェクト obj = JSONValue.parse(inputParam); JSONObject jsonObject = (JSONObject) obj;

于 2013-03-13T06:40:15.867 に答える
0

はい、getJSONObject取得した値が JSON オブジェクトであることを確認するために使用する必要があります。JSONExceptionはい、配列内のそのインデックスが存在しない場合、またはオブジェクトが含まれていない場合にスローされる可能性をキャッチする必要があります。

次のようになります。

JSONObject firstVenue;
try {
    firstVenue = venues.get(0);
} catch (JSONException e) {
    // error handling
}
于 2013-03-13T05:22:24.350 に答える