web-dev-qa-db-ja.com

androidのHttpResponse実行でホスト名がnullにならない場合があります

「ターゲットホストをnullにするか、パラメータに設定してはいけません」というエラーが表示されます。

  • 私はしますマニフェストファイルでインターネット許可を持っています
  • RLの前に「http://」を付けました
  • 私はします URLをエンコードします

これは私のコードです:

   String url = "http://maps.google.com/maps/api/directions/json?origin=1600 Pennsylvania Avenue NW, Washington, DC 20500&destination=1029 Vermont Ave NW, Washington, DC 20005&sensor=false";
   HttpClient httpclient = new DefaultHttpClient();
   String goodURL = convertURL(url);//change weird characters for %etc
   HttpPost httppost = new HttpPost(goodURL);
   HttpResponse response = httpclient.execute(httppost);

5行目(上記の最後の行)で、私のプログラムは例外をスローします。正確なエラーは次のとおりです。

Java.lang.IllegalArgumentException: Host name may not be null

メソッドconvertURLで文字列をエンコードします...

goodURL = http://maps.google.com/maps/api/directions/json?origin=3%20Cedar%20Ave%2c%20Highland%20Park%2c%20NJ%2008904&destination=604%20Bartholomew%20Road%2c%20Piscataway%2c%20New%20Jersey%2008854&sensor=false

助言がありますか?ありがとう!

10
cafesanu

URLエンコードメソッドが何をしているのかわかりませんが、URLEncoderのようなフレームワークのメソッドを使用している場合、完全なURLを渡してはいけません、パラメータリストだけ特殊文字をエスケープするにはエンコードする必要があります。

完全なURLをエンコードすると、://%3A%2F%2Fに、追加のすべてのスラッシュを%2Fに含め、すべての文字がパーセントエスケープされます。

エンコードした後、goodUrl文字列の値を確認してください。

5
Devunwired

使用するだけ:

URLEncoder.encode(YOUR_STRING);
1
Samer

リクエストを投稿する前にURL文字列をエンコードしますが、パラメータは?:の後にのみエンコードします。

String url = "http://maps.google.com/maps/api/directions/json?";
String params = "Origin=1600 Pennsylvania Avenue NW, Washington, DC 20500&destination=1029 Vermont Ave NW, Washington, DC 20005&sensor=false";
HttpClient httpclient = new DefaultHttpClient();
String goodParams = convertURL(params);//change weird characters for %etc
HttpPost httppost = new HttpPost(url + goodParams);
HttpResponse response = httpclient.execute(httppost);
1
AWT