2011-03-14 20 views
5

Aşağıdaki kodu kullanarak aşağıdaki linki yürütmeye çalışıyorum: "msg ="android HTTPGet sorunu

String url="http://<server>/<path>/action=send&msg=newmessage"; 
deyişiyle hiçbir boşluklar vardır URL'ye aşağıda verilmiştir için herhangi bir hata olmasa Oysa

class httpget{ 
HttpGet httpGet=null; 

public void linkexecute(){ 
String url="http://<server>/<path>/action=send&msg=new message"; 
httpGet= new HttpGet(url); // line 1 
.... 
} 

at line 1 it is giving error "Illegal arguement exception"  
java.lang.IllegalArgumentException: Illegal character in query at index 77: http://<server>/<path>/sms.json?action=send&msg=new message  
at java.net.URI.create(URI.java:970)  
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)  
at com.sms.login.LoginService.sendSms(LoginService.java:143) 

URL'deki kelimelerde boşluk konusunu nasıl çözebilirim?

+0

Tam URL'nizi gönderebilir misiniz? –

cevap

1

i İşte uzayda

+0

Evet, bir "%" için "" için bir Dize değiştirin. – sinni800

+0

Sadece boş alanınız olduğunda iyi, ama birçok başka karakter var, o zaman IllegalCharacterException verin. –

15

yerine% 20 kullanmak gerektiğini düşünüyorum, sana url tüm geçersiz karakterler kaldıracak bir işlev verir. Lütfen URL'nizi bu işleve iletin ve kodlanmış dizelerle yeni bir URL alacaksınız. Benim webcoder değişkenleri gönderim zaman tüm parametreleri değiştirerek çünkü

public static String convertURL(String str) { 

    String url = null; 
    try{ 
    url = new String(str.trim().replace(" ", "%20").replace("&", "%26") 
      .replace(",", "%2c").replace("(", "%28").replace(")", "%29") 
      .replace("!", "%21").replace("=", "%3D").replace("<", "%3C") 
      .replace(">", "%3E").replace("#", "%23").replace("$", "%24") 
      .replace("'", "%27").replace("*", "%2A").replace("-", "%2D") 
      .replace(".", "%2E").replace("/", "%2F").replace(":", "%3A") 
      .replace(";", "%3B").replace("?", "%3F").replace("@", "%40") 
      .replace("[", "%5B").replace("\\", "%5C").replace("]", "%5D") 
      .replace("_", "%5F").replace("`", "%60").replace("{", "%7B") 
      .replace("|", "%7C").replace("}", "%7D")); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return url; 
} 
+0

bunun için yöntemler var ... – njzk2

+0

Benim sayımda bu yaklaşık 30 String nesnesi oluşturur ... brüt. –

12

Kesinlikle, URLEncoder benim için iş vermedi URLEncoder.encode(String, String)

1

kullanmalıdır. Ben HTTPGet yöntemi aynı şekilde çalışacaktır varsayalım HttpClient ...

String xml = null; 
DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(url); 

HttpResponse httpResponse = httpClient.execute(httpPost); 
HttpEntity httpEntity = httpResponse.getEntity(); 
xml = EntityUtils.toString(httpEntity); 

ile HttpPost kullanarak indirilen veri ayrıştırma daha sonra

URI uri = new URI("http", "server", "/path", "action=send&msg=newmessage", null); 
String url = uri.toASCIIString(); 

ve kullanma sona erdi.

5

Sorunun URL parametreleriyle olduğunu düşünüyorum. Bunun yerine Kodlama veya tüm URL'yi değiştirme, sadece bu gibi parametreleri ilke kodlamak:

Url: http://myHost.com/mail.do?address=New York [email protected]&time=12$3; 
right url:http://myHost.com/mail.do? + UrlEncode(address) + "&" + UrlEncode(time); 

Başka bir örnek:

String url = "http://myHost.com/mail.do"; 
if (params != null) { 
url += "?"; 
Boolean beginAddParams = true; 
for (Entry<String, String> entryParams : params.entrySet()) { 
if (!beginAddParams) { 
    url +="&"; 
    } else { 
    beginAddParams = false; 
    } 
    url += entryParams.getKey() + "=" + entryParams.getValue(); 
} 

Ve kullanın:

Map<String, String> params = new HashMap<String, String>(); 
params.put("email", URLEncoder.encode(loginStr)); 
params.put("pass", URLEncoder.encode(passwStr)); 
Model.doAuthUser(params, userCallback); 

Model.doAuthUser aşağıdaki gibi loks url Nerede istersen.