3

これが私のコードです:

HttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");
            HttpGet request = new HttpGet();
            request.setHeader("Content-Type", "text/plain; charset=utf-8");
            Log.d("URL", convertURL(URL));
            request.setURI(new URI(URL));
            HttpResponse response = client.execute(request);
            bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer stringBuffer = new StringBuffer("");
            String line = "";
            String NL = System.getProperty("line.separator");

URLのどのエラーがわかりません:

http://localhost/CyborgService/chatservice.php?action=recive_game&nick_sender=mkdarkness&pass=MV030595&date_last=2012-11-18 09:46:37&id_game=1

すでにURLを変換する関数を使用していますが、機能していません。しかし、ブラウザでこのURLを開こうとすると、正常に開きます。

これが私のエラーです:

11-18 21:46:37.766: E/GetHttp(823): java.net.URISyntaxException: Illegal character in query at index 127: http://192.168.0.182/CyborgService/chatservice.php?action=recive_game&nick_sender=mkdarkness&pass=MV030595&date_last=2012-11-18 09:46:37&id_game=1
4

3 に答える 3

9

URLの127の位置にスペースがあります。日付は「date_last=2012-11-1809:46:37」として生成されるため、URLを開くときにエラーが発生します。

スペースはURLで正式に受け入れられませんが、ブラウザはそれを「%20」または「+」に変換します。どちらもURL内のスペースの有効な表現です。すべての文字をエスケープする必要があります。スペースを「+」に置き換えるか、文字列をURLEncoderに渡して、それで済ませることができます。

URLEncoderを使用するには、たとえば次の質問を参照してください:完全なURLではなく、パラメータ値のみをURLEncoderでエンコードします。または、単一のパラメーターではなく、いくつかのパラメーターを持つURIのコンストラクターの1つを使用します。URLを構成するコードが表示されていないため、明示的にコメントすることはできません。ただし、パラメータのマップがある場合は、次のparameterMapようになります。

String url = baseUrl + "?";
for (String key : parameterMap.keys())
{
  String value = parameterMap.get(key);
  String encoded = URLEncoder.encode(value, "UTF-8");
  url += key + "&" + encoded;
}

いつか、Javaがエンコーディングを設定する必要があり、デフォルトのエンコーディングとして「UTF-8」を使用するのではなく、エンコーディングが「UTF-8」である必要がある理由について話すことができますが、今のところ、このコードでうまくいくはずです。 。

于 2012-11-18T22:01:03.717 に答える
2

空白文字があります:

...2012-11-18 09:46:37...(インデックス127で、エラーメッセージが示すように)。

に置き換えてみてください%20

于 2012-11-18T21:59:24.433 に答える
0

このようにすると、間違いなくあなたを助けます

    HttpClient myClient = new DefaultHttpClient();

            HttpPost myConnection = new HttpPost("http://192.168.1.2/AndroidApp/SendMessage");

            try {

    //Your parameter should be as..

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("messageText", msgText));
                nameValuePairs.add(new BasicNameValuePair("senderUserInfoId", loginUserInfoId));

//set parameters to ur URL

                myConnection.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//execute the connection
                HttpResponse response = myClient.execute(myConnection);
    }
    catch (ClientProtocolException e) {

                //e.printStackTrace();
            } catch (IOException e) {
                //e.printStackTrace();
            }
于 2015-01-29T06:46:59.530 に答える