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

и это'работает нормально :)

 Dipak Keshariya25 окт. 2012 г., 06:46
@Baskoro Что-то не так в URL вашего веб-сервиса, поэтому, пожалуйста, проверьте это.
 Aelexe25 окт. 2012 г., 05:41
Размещение выдержки из вашего кода было бы хорошим началом.

Ответы на вопрос(4)

Проверь это

String myurltoencode = "http://ip/autodownload/andro.php?key=apps.apk|2|bla.bla.bla";
URLEncoder.encode(myurltoencode,"UTF-8"); 
 akubabas25 окт. 2012 г., 05:54
Я все готов попробовать, как это, но все еще не работает .. какая идея ??

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

String link="http://example.php?string1="+URLEncoder.encode(string1)+"&string2="+URLEncoder
.encode(string2)+"&string3="+URLEncoder.encode(string3)+"&string4="+URLEncoder.encode(string4)+"";
 Robi Kumar Tomar11 сент. 2014 г., 11:38
+1 для URLEncoder.encode ()

В моем случае проблема была связана с переменной, которую я добавлял. Это было дополнительное пространство (пробелы). Я урезал это, и ошибка ушла. "http://somewebsite.com/somefile?q=»+ 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

Ваш ответ на вопрос