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");

我不知道我的网址中有哪个错误:

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-18 09:46:37”,这会在打开 URL 时导致错误。

URL 中不正式接受空格,但您的浏览器会很乐意将其转换为“%20”或“+”,这两者都是 URL 中空格的有效表示。您应该转义所有字符:您可以用“+”替换空格,或者只是通过URLEncoder传递字符串并完成它。

要使用 URLEncoder,请参见这个问题:仅使用 URLEncoder 编码参数值,而不是完整的 URL。或者使用具有几个参数而不是单个参数的 URI 构造函数之一。您没有显示构造 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 回答