2009-06-14 16 views
9

मैं निम्नलिखित पद्धति का उपयोग करके Android ऐप्लिकेशन से एक RESTful वेब सेवा को कॉल करने के लिए कोशिश कर रहा हूँ:समाधान नहीं किया गया होस्ट अपवाद एंड्रॉयड

HttpHost target = new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT); 
HttpGet get = new HttpGet("/list"); 
String result = null; 
HttpEntity entity = null; 
HttpClient client = new DefaultHttpClient(); 
try { 
    HttpResponse response = client.execute(target, get); 
    entity = response.getEntity(); 
    result = EntityUtils.toString(entity); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    if (entity!=null) 
     try { 
      entity.consumeContent(); 
     } catch (IOException e) {} 
} 
return result; 

मैं पता और एंड्रॉयड एम्यूलेटर ब्राउज़र और से का उपयोग कर xml परिणाम देखने के लिए ब्राउज़ कर सकते हैं मेरी मशीन मैंने अपना ऐप इंटरनेट अनुमति दी है।

मैं ग्रहण के साथ विकास कर रहा हूं।

मैंने देखा है कि मुझे प्रॉक्सी कॉन्फ़िगर करने की आवश्यकता हो सकती है, लेकिन जब से मैं जिस वेब सेवा को कॉल कर रहा हूं वह पोर्ट 80 पर है, इससे कोई फर्क नहीं पड़ता? मैं ब्राउज़र के साथ विधि को कॉल कर सकता हूं।

कोई भी विचार?

+0

प्रॉक्सी सेटिंग में कोई फर्क नहीं होगा जब तक कि आपके डिवाइस एक प्रॉक्सी सर्वर के पीछे है। –

+0

यही वह था जो मैं सोच रहा था। मैं अभी भी यह काम नहीं कर सकता। –

उत्तर

14

मुझे लगता है कि समस्या पहली पंक्ति पर हो सकता है:

new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);

HttpHost निर्माता अपनी पहली तर्क है, न कि "http://" उपसर्ग के साथ एक होस्ट नाम के रूप में एक होस्ट नाम की उम्मीद है। अपने कोड में

new HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);
3

त्रुटि का अर्थ है कि URL को DNS के माध्यम से हल नहीं किया जा सकता है। ऐसी कई समस्याएं हैं जो इसका कारण बन सकती हैं। यदि आप प्रॉक्सी के पीछे बैठते हैं तो आपको इसे इस्तेमाल करने के लिए कॉन्फ़िगर करना चाहिए।

HttpHost proxy = new HttpHost(”proxy”,port,”protocol”); 
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 

भी जांच लें कि आपका internetpermission इस

<uses-permission android:name=”android.permission.INTERNET”></uses-permission> 

तरह लग रहा है के रूप में कभी कभी यह के रूप में खाली टैग काम नहीं करेगा।

इसके अलावा बाहर Emulator Networking की जाँच करें और वहाँ सीमाओं अनुभाग

+0

मुझे प्रॉक्सी सेटिंग्स के बारे में निश्चित नहीं है क्योंकि मैं केवल पोर्ट 80 पर टक्कर मार रहा हूं और एम्यूलेटर का ब्राउज़र webservice को कॉल कर सकता है। –

+0

यह सामान्य एचटीपीजीट ("http: // होस्ट/पथ") का उपयोग करते समय मेरे लिए यह किया; - ग्रहण इस एक्सएमएल टैग को अंदर नहीं लग रहा है। धन्यवाद! – ndrix

+0

<उपयोग-अनुमति एंड्रॉइड: name = "android.permission.INTERNET"> मेरे लिए भी काम किया। –

1

मैं दोबारा जांचना नेटवर्क अनुमति ठीक से सेट है होगा।

String address -"http://www.google.com"; 
URL url = new URL(address);    
InputStream in = url.openStream(); 

जैसी कुछ मूलभूत कोशिश करें ताकि आपकी अनुमतियां सही हो जाएं।

इसके बाद आप अपने पसंदीदा प्रोटोकॉल विश्लेषक (मैं एक वायरशर्क प्रशंसक हूं) का उपयोग करने के लिए यह पता लगाने के लिए कि क्या आप सही पैकेट भेज रहे हैं। मेरा मानना ​​है कि आपको HTTPGet पर पूर्ण यूआरएल में पास करने की जरूरत है, लेकिन मैं केवल 80% निश्चित हूं।

+0

ठीक है, मैं इस विधि का उपयोग कर डेटा वापस प्राप्त कर सकता हूं। हालांकि मैं यह नहीं समझ सकता कि मूल कोड क्यों काम नहीं करता है। मैं फिडलर में कुछ भी नहीं देख रहा हूं! –

+0

क्या यह विधि एक आरईएसटी वेब सेवा कॉल करने का एक वैध तरीका है? अर्थात।एक स्ट्रिंग में इनपुट स्ट्रीम खपत? –

+0

यह एक बहुत ही सरल विधि है लेकिन यह आपके द्वारा किए जा रहे कार्यों के आधार पर पर्याप्त हो सकता है। मैं फिडलर से परिचित नहीं हूं लेकिन मुझे यकीन नहीं है कि यह एक पैकेट स्निफर के समान है। मुझे लगता है कि यूआरएल या मेजबान गलत है। मैं पूर्ण यूआरएल ("http: //" + ServiceWrapper.SERVER_HOST + "// list") में गुजरने का प्रयास करूंगा और देख सकता हूं कि इससे मदद मिलती है या नहीं। – hacken

0

बदलें पहली पंक्ति:

कोशिश "http://" को दूर करने और यह काम करना चाहिए

HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT); 
+0

यह स्वीकृत उत्तर के समान है। –

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