2012-11-18 128 views
3

這裏是我的代碼:URL非法字符

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 
+0

我還沒有算出來的127個字符,但我猜在'2012年11月18日09空間:46:37'的問題。 .. – Sam

+0

不要把標籤放在主題 –

回答

8

替換它。在你的URL的空間中,在127的日期,作爲生成的位置「date_last = 2012年11月18日9點46分37秒」,這會導致錯誤時打開網址。

儘管您的瀏覽器會很樂意將其轉換爲「%20」或「+」,即URL中空格的有效表示形式,但空間並未在URL中正式接受。你應該跳過所有的字符:你可以用「+」來代替空格,或者只是通過URLEncoder來傳遞字符串並完成它。

要使用URLEncoder請參閱this question:僅使用URLEncoder對參數值進行編碼,而不使用完整的URL。或者使用一個具有幾個參數的URI的構造函數,而不是一個。您沒有顯示構建網址的代碼,因此我無法對其進行明確評論。但如果你有地圖參數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」作爲默認編碼,但現在這個代碼應該做的伎倆。

+1

是的,你需要使用URLEncoder。它遠不止是空間問題。這將生成編碼的URL以在所有情況下使用。 +1 – Doomsknight

+0

alexinblue,我嘗試使用URLEncoder,但沒有成功我的網址是這樣的:http%3A%2F%2F192.168.0.182%2FCyborgService%2Fchatservice.php%3Faction%3Drecive_game%26nick_sender%3Dmkdarkness%26pass%3DMV030595%26date_last%3D2012 -11-19 + 12%3A40%3A05%26id_game%3D1 和其他錯誤:java.lang.IllegalStateException:目標主機不能爲null或在參數中設置。 – Kefka

+0

感謝您的接受,我將添加一段關於如何使用URLEncoder的段落。 – alexfernandez

2

有一個空白字符:

...2012-11-18 09:46:37...(在指數127,就像錯誤消息指出)。

嘗試用%20

0

做這樣一來就會definetly幫助你

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(); 
      }