0

Google Distance Matrix APIから JSON を大まかに解析しようとしましたが、距離が表示されません。

私の GPS 位置は0,0、確かなものではありません。

文字列距離 = getMatrix(緯度、経度);

関数の私のコードは次のとおりです。

private String getMatrix(double lat , double lang){
  JSONObject jObj;
  String getdistance = "";
  String strUrl = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" 
                  + Double.toString(my_lat) + "," 
                  + Double.toString(my_lang) 
                  + "&destinations="+ Double.toString(lat) + "," 
                  + Double.toString(lang) 
                  + "&mode=walking&sensor=false";

  String data = "";
  InputStream reader = null;
  HttpURLConnection urlConnection = null;
  try{
    URL url = new URL(strUrl);
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.connect();

    reader = urlConnection.getInputStream();
    int bRead = -1;
    byte[] buffer = new byte[1024];
    do {
      bRead = reader.read(buffer, 0, 1024);
      if (bRead == -1) {
        break;
      }
      data += new String(buffer, 0, bRead);
    } while (true);
    urlConnection.disconnect();
  } catch(Exception e) {
  } finally {

  }

  try {
    jObj = new JSONObject(data);

    JSONArray rowsArray = jObj.getJSONArray("rows");
    JSONObject rows = rowsArray.getJSONObject(0);

    JSONArray elementsArray = rows.getJSONArray("elements");
    JSONObject newDisTimeOb = elementsArray.getJSONObject(0);

    JSONObject distOb = newDisTimeOb.getJSONObject("distance");
    getdistance = distOb.optString("text").toString();
  } catch (JSONException e) {
    e.printStackTrace();
  }

  return getdistance;
}
4

1 に答える 1

1

まず、コード内の URL 文字列が正しく作成されているかどうかを確認します。

String strUrl = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=" 
                  + Double.toString(my_lat) + "," 
                  + Double.toString(my_lang) 
                  + "&destinations="+ Double.toString(lat) + "," 
                  + Double.toString(lang) 
                  + "&mode=walking&sensor=false";

// Line to check if url code is right
Log.d("APP", "strUrl = " + strUrl);

次に、実際にデータを生成するかどうか、次のコードを確認します。

reader = urlConnection.getInputStream();
int bRead = -1;
byte[] buffer = new byte[1024];
do {
  bRead = reader.read(buffer, 0, 1024);
  if (bRead == -1) {
    break;
  }
  data += new String(buffer, 0, bRead);
} while (true);

私の提案はBufferedReader、バイトごとに応答バイトを読み取る代わりに使用することです。

次に変更します。

getdistance = distOb.optString("text").toString();

getdistance = distOb.getString("text");

ここで再度文字列に変換する必要がないためです。

Google マップ Web サービスのクライアント ライブラリを検索したところ、 DistanceMatrixApi.javaが見つかりまし た。使えるかもしれませんが、保証はできません。

于 2016-07-16T12:44:32.530 に答える