2017-09-18 9 views
0

だから私は場所の「名前」をキーにしてハッシュマップにplace_idを格納します。Googleの場所の詳細「photos []」jsonarrayは常にnullです

private HashMap<String, String> placeTitleId = new HashMap<>(); 

if (!place.isNull("place_id")) { 
    placeId = place.getString("place_id"); 
    placeTitleId.put(name, placeId); 
} 

その後、私は場所の詳細検索のURLを作成します。

private String createPlaceDetailsUrl(String placeId) { 
      StringBuilder stringBuilder = new StringBuilder("https://maps.googleapis.com/maps/api/place/details/json?"); 
      stringBuilder.append("placeid=").append(placeId); 
      stringBuilder.append("&key=").append(GOOGLE_PLACES_API_KEY); 
      return stringBuilder.toString(); 
} 

は最後に、私は、JSONレスポンスを解析:なぜ「写真私は理解していない何

JSONObject data = new JSONObject(result); 
if (data.getString("status").equalsIgnoreCase("OK")) { 
    JSONArray photoArray = data.getJSONArray("photos"); 
} 

です"json配列に値がありません Androidモニター:W/System.err:org.json.JSONException:写真に値なし

ドキュメントにはphotos [] jsonarrayに最大10枚の写真があるはずです。しかし、jsonの出力スキーマにはphotos []オブジェクトが含まれていません。 place_idを取得する方法や応答を解析する方法に問題がありますか?

EDIT:

result { 
"address components" : [ 
     *bunch of stuff* 
] 
... 
"geometry" : { 
     *bunch of stuff* 
} 
"icon" 
"id" 
"photos" : [ 
{ 
     "height" 
     "html_attributions: 
     "photo_reference!! 
} 
{ 
    ... 
    "photo_reference!! 
} 
*bunch more of these* 
] 
} 

EDIT: 修正はJSONオブジェクトを取得している「結果

JSONObject jsonObject = new JSONObject(result); 
JSONObject data = new JSONObject("result"); 
私はその要旨を提供することができます

"結果" の文字列が非常に長いですが、

データオブジェクトに「画像」があります

+0

中に存在するかどうかを決定するために

使用

JSONObject data = new JSONObject(result); if(data.has("TAG")){ // if has it in your data,do something } 

?あなたはおそらくそこでデバッグし、その中に '写真'についてsomethigがあるかどうかチェックします。 – procrastinator

+0

My JSONDataには、場所の詳細要求によって返された1つの場所の詳細が含まれています。ドキュメントによると、 "写真"オブジェクトにはある程度の価値があるはずです。私は複数の場所もテストしましたが、それらはすべて空の "写真"オブジェクトを返します。 – user3131097

+0

ブラウザでサーバーに渡しているURLをヒットし、実際に '写真 'が含まれているかどうかを確認します。 – procrastinator

答えて

0

これを試してください。

JSONObject data = new JSONObject(result); 
// add log here ,make sure you have photos in your result 
Log.e("result", result + ""); 
if (data.getString("status").equalsIgnoreCase("OK")) { 
    // edited here 
    JSONArray photoArray = data.optJSONArray("photos"); 
} 

編集コード内

if (data .has("photos")) { 
    Log.e("photos", "photos exists"); 
} else { 
    Log.e("photos", "photos not exists"); 
} 

使用data .has("photos")し、それを判断します。このタグは、あなたのJSONDataは何が含まれないデータ

+0

data.optJSONArray(" photos ")はエラーを投げませんでした。しかし、配列の長さをチェックすると:Android Monitor:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'int org.json.JSONArray.length()'を呼び出そうとしました – user3131097

+0

'result string value @?user3131097 – KeLiuyue

+0

'optJSONArray'メソッドを使用すると、存在しない値を取得したときに例外を直接報告することはありませんが、空の文字列を返します – KeLiuyue

関連する問題