Java.lang.illegalargumentexception незаконный символ в URL-адресе

Я хочу запросить в веб-службу
Мой параметр как этот

urlString = http://ip/autodownload/andro.php?key=apps.apk|2|bla.bla.bla public void getRequest(String Url) { Toast.makeText(this, "Tambah Data " + Url + " ", Toast.LENGTH_SHORT).show(); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(urlString); try { System.out.println("tes"); HttpResponse response = client.execute(request); Toast.makeText(this,request(response),Toast.LENGTH_SHORT).show(); String res = EntityUtils.toString(response.getEntity()); System.out.println(res); Update(res); } catch (Exception ex) { Toast.makeText(this, "Gagal Konek Server !", Toast.LENGTH_SHORT).show(); } } 

Если я запускаю в браузере, все в порядке, но когда я запускаю в android, это ошибка, подобная этой

 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): FATAL EXCEPTION: main 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): java.lang.IllegalArgumentException: Illegal character in query at index 67: http://10.234.152.120/autodownload/andro.php?key=DeliverReceipt.apk|2|com.sat.deliver 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at java.net.URI.create(URI.java:970) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.sat.deliver.MenuUtama.getRequest(MenuUtama.java:140) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.sat.deliver.MenuUtama.requestParam(MenuUtama.java:118) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.sat.deliver.MenuUtama.onClick(MenuUtama.java:355) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.view.View.performClick(View.java:2408) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.view.View$PerformClick.run(View.java:8816) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.os.Handler.handleCallback(Handler.java:587) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.os.Handler.dispatchMessage(Handler.java:92) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.os.Looper.loop(Looper.java:123) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at android.app.ActivityThread.main(ActivityThread.java:4627) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at java.lang.reflect.Method.invokeNative(Native Method) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at java.lang.reflect.Method.invoke(Method.java:521) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 10-25 10:24:49.862: ERROR/AndroidRuntime(14602): at dalvik.system.NativeStart.main(Native Method) 

Я пытаюсь использовать Urlencoding и заменяющий персонаж, но он не работает
Что я должен делать?
* РЕШИТЬ
Я делаю замену символа в urlString как:

 urlString+="?key="+appName.trim().replace(".", "%2E")+"|2|".trim().replace("|", "%7C")+packageName.trim().replace(".", "%2E"); 

И это отлично работает 🙂

Попробуйте кодировать URL

 String link="http://example.php?string1="+URLEncoder.encode(string1)+"&string2="+URLEncoder .encode(string2)+"&string3="+URLEncoder.encode(string3)+"&string4="+URLEncoder.encode(string4)+""; 

Проверь это

 String myurltoencode = "http://ip/autodownload/andro.php?key=apps.apk|2|bla.bla.bla"; URLEncoder.encode(myurltoencode,"UTF-8"); 

В моем случае это была переменная, которую я добавлял, что вызвало эту проблему. У него было дополнительное пространство (пробелы). Я обрезал его, и ошибка исчезла. "http://somewebsite.com/somefile?q=&quot; + someVariable.trim ()

Это сработало для меня. Предположим, что у вас есть незаконный символ внутри вашего IP-адреса. Затем преобразуйте его в код Base64 и отправьте на свой сервер.

Например:

 String ip_address = StaticClass.getIPAdress(); try { // Sending side byte[] data = ip_address.getBytes("UTF-8"); ip_address = Base64.encodeToString(data, Base64.DEFAULT); } catch (Exception e) { e.printStackTrace(); ip_address = ""; } Write encode ip_address or any field you want inside your url. Decode the variables at your server. But i'm not sure if you are using : com.loopj.android.http.AsyncHttpClient.get 

vkj