0

この URL を android httpget で呼び出して、方向の json 配列を取得しようとしています: http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize: true%7cBarossa+Valley,SA%7cClare,SA%7cConnawarra,SA%7cMcLaren+Vale,SA&sensor=false "

基本的にこれは私がこれまで行ってきたことです:

1)Googleの指示を呼び出し、取得した結果をログに記録するために、最初にasynctaskを作成しました:

public class MyTask extends AsyncTask<String, Integer, String> {

@Override
protected String doInBackground(String... params) {

InputStream is = null;

    String result = null;

try{

        HttpClient httpclient = new DefaultHttpClient();
         HttpGet httpget = new HttpGet(params[0]);
         HttpResponse response = httpclient.execute(httpget);
         HttpEntity entity = response.getEntity();
         int lenght = (int) entity.getContentLength();

         StringBuffer buffer = new StringBuffer(lenght);

         is = entity.getContent();
         }catch(Exception e){
             Log.e("log_tag", "Error in http connection"+e.toString());
        }

    try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);

         StringBuilder sb = new StringBuilder();
         sb.append(reader.readLine() + "\n");

         String line="0";
         while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
          }
          is.close();
        result = sb.toString();
          }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
          }

    Log.i("Result", result);


    return result;



  }


}

2) メイン アクティビティで、URL を渡して非同期タスクを実行します。

    MyTask t = new MyTask();
    t.execute(urlString.toString());

ここで、urlString は StringBuilder です。URLEncoder.encode(myUrl) でエンコードしようとしても、いくつかの方法でそのアドレスを構築しようとしましたが、常に例外が発生します。これはhttp connectionjava.lang.NegativeArraySizeException のエラーであり、取得できませんgoogle からの json データ。そのURLを正しくフォーマットするにはどうすればよいですか? 私の目標は、この男が(json部分で)行ったのと同じ結果を達成することです:http://blog.synyx.de/2010/06/routing-driving-directions-on-android-part-1-get-the -ルート/

ありがとう!

4

2 に答える 2

1

やっとわかる!Google Web サービスの呼び出し方法を変更しました。基本的にこの部分:

     HttpClient httpclient = new DefaultHttpClient();
     HttpGet httpget = new HttpGet(params[0]);
     HttpResponse response = httpclient.execute(httpget);
     HttpEntity entity = response.getEntity();

この別の方法で Google Web サービスを呼び出します。

        HttpURLConnection urlConnection = null;
        url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true%7cBarossa+Valley,SA%7cClare,SA%7cConnawarra,SA%7cMcLaren+Vale,SA&sensor=false");
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        is = urlConnection.getInputStream();
        urlConnection.connect();

次に、InputStreamReader 内の入力ストリーム、Buffered Reader 内の InputStreamReader を「チェーン」し、すべて正常に動作します。

        InputStreamReader inputStream = new InputStreamReader(is);
        BufferedReader r = new BufferedReader(inputStream);
        String line = null;
        line = r.readLine();
        while (line!=null){

            Log.i("RESULT", line);

            line = r.readLine();

        }

このようにして、目的の結果をログに記録できます。私が理解したいことの 1 つは、httpclient が機能しないのに、代わりに httpURLConnection が機能する理由です。誰でも私を助けることができますか?

于 2012-05-31T10:35:37.493 に答える
0

どこにも使用されていないため、問題のあるコードを削除するだけですか?

//int lenght = (int) entity.getContentLength();

//StringBuffer buffer = new StringBuffer(lenght);
于 2012-05-31T09:52:39.220 に答える