2011-03-14 20 views
5

मैं निम्नलिखित कोड का उपयोग कर नीचे दिए गए लिंक पर अमल करने की कोशिश कर रहा हूँ: वहाँ कोई त्रुटि यूआरएल जो "msg ="एंड्रॉयड httpGet मुद्दा

String url="http://<server>/<path>/action=send&msg=newmessage"; 
के शब्दों में कोई अंतराल है नीचे दिए गए के लिए है जबकि

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 में शब्दों में अंतर के मुद्दे को मैं कैसे हल कर सकता हूं?

+0

क्या आप अपना पूरा यूआरएल पोस्ट कर सकते हैं? –

उत्तर

1

मुझे लगता है कि आप यहाँ अंतरिक्ष

+0

हां, स्ट्रिंग को% 20 से प्रतिस्थापित करें। – sinni800

+0

यह अच्छा है जब आपके पास यूआरएल में जगह है, लेकिन कई अन्य पात्र हैं, जो तब अवैध कैरेक्टर अपवाद देते हैं। –

15

के बजाय 20% का उपयोग करना चाहिए, मैं तुम्हें एक समारोह है कि यूआरएल से सभी अमान्य वर्ण निकाल देंगे दे। कृपया इस फ़ंक्शन में अपना यूआरएल पास करें और आपको एन्कोडेड तारों के साथ एक नया यूआरएल मिलेगा।

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

इसके लिए विधियां हैं ... – njzk2

+0

मेरी गिनती से यह लगभग 30 स्ट्रिंग ऑब्जेक्ट्स बनाता है ... सकल। –

12

आप निश्चित रूप से URLEncoder.encode(String, String)

1

का उपयोग URLEncoder मेरे लिए बाहर काम नहीं किया जाना चाहिए जब मैं अपने वेब सेवा करने के लिए चर पोस्टिंग हो रही थी, क्योंकि यह सभी मापदंडों की जगह किया गया था। मैं

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

और उच्चतर का उपयोग 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); 

साथ httpPost उपयोग करते हुए मेरे डाउनलोड किए गए डेटा पार्स करने पर मुझे लगता है कि httpGet विधि उसी तरह काम करेंगे समाप्त हो गया।

5

मुझे लगता है कि यह समस्या यूआरएल के पैरामीटर के साथ है। एन्कोडिंग या पूरे URL की जगह के बजाय, सिर्फ इस तरह parametres सांकेतिक शब्दों में बदलना:

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

एक और उदाहरण है:

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

और का उपयोग करें:

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 निम्नलिखित की तरह loks url जहां भी आप चाहते हैं।

संबंधित मुद्दे