मैं एक एंड्रॉइड प्रोजेक्ट पर काम कर रहा हूं और मैं उस बिंदु पर हूं जहां मैं जानकारी के लिए कुछ एपीआई पूछना चाहता हूं। ऐसा लगता है कि यह बहुत बुनियादी होना चाहिए!एंड्रॉइड समस्या का उपयोग कर HttpResponse: निष्पादन हमेशा अपवाद का कारण बनता है?
private InputStream retrieveStream2(String url)
{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(url);
System.out.println("getRequest == " + getRequest);
try {
HttpResponse getResponse = client.execute(getRequest);//here is teh problem
final int statusCode = getResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK)
{
Log.w(getClass().getSimpleName(),
"Error " + statusCode + " for URL " + url);
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
return getResponseEntity.getContent();
}
catch (Exception e)
{
getRequest.abort();
Log.w(getClass().getSimpleName(), "Error for URL, YO " + url, e);
}
return null;
}
जहां यूआरएल चर स्ट्रिंग है "http://search.twitter.com/search.json?q=javacodegeeks":
यहाँ मेरी कोड के सामान्य सार है।
जैसा कि आप देख सकते हैं कि उस साइट पर कुछ अच्छी JSON जानकारी है; मेरी समस्या यह है कि हर बार 'client.execute (getRequest);' 'कहा जाता है, प्रोग्राम फेंकता है और अपवाद पकड़ता है। उपयोगी नहीं!
1) आप एमुलेटर/उपकरण इंटरनेट का उपयोग करने के लिए अनुमति सेट करने के लिए है:
मैं दो बातें सुना है! - मुझे लगता है कि मैंने इसे कवर किया है, लेकिन शायद मैंने यह गलत किया! AndroidManifest.xml में मैं जोड़ा
< uses-permission android:name="android.permission.INTERNET" >< /uses-permission>
तो यह है कि।
2) (जो मैं इतना निश्चित नहीं हूं) आप 'ui' धागे के भीतर 'नेटवर्किंग' धागा शुरू नहीं कर सकते हैं। मुझे पूरा यकीन नहीं है कि इसका क्या अर्थ है, लेकिन मैं आगे बढ़ गया और एंड्रॉइड थ्रेड, हैंडलर और असिनक टास्क पर कुछ ट्यूटोरियल का पालन किया। यहाँ: कृपया AsyncTask ट्यूटोरियल है, जो मैं पीछा के तहत कोड की जाँच:
http://www.vogella.de/articles/AndroidPerformance/article.html
AsyncTask ट्यूटोरियल के साथ पालन करने के बाद, मैंने पाया कि मैं अभी भी एक ही problem--
लाइन थी : एचटीपीजीट httpGet = नया एचटीपीजीट (यूआरएल) हमेशा पहले जैसा अपवाद फेंक दिया।
यहाँ ऊपर सूत्रण ट्यूटोरियल के साथ मेरी प्रयास से logcat है:
"ava.net.UnknownHostException: मेजबान को हल करने में असमर्थ"
02-27 20:43:28.565: I/ActivityManager(92): START {cmp=com.Prometheus.R1/.JsonParsingActivity} from pid 574
02-27 20:43:28.565: W/WindowManager(92): Failure taking screenshot for (180x300) to layer 21010
02-27 20:43:28.896: I/System.out(574): pre execute
02-27 20:43:29.236: I/ActivityManager(92): Displayed com.Prometheus.R1/.JsonParsingActivity: +638ms
02-27 20:43:29.329: I/ARMAssembler(35): generated scanline__00000077:03010104_00008001_00000000 [ 89 ipp] (110 ins) at [0x40fad6a8:0x40fad860] in 7204915 ns
02-27 20:43:30.016: W/System.err(574): java.net.UnknownHostException: Unable to resolve host "search.twitter.com": No address associated with hostname
02-27 20:43:30.016: W/System.err(574): at java.net.InetAddress.lookupHostByName(InetAddress.java:426)
02-27 20:43:30.026: W/System.err(574): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
02-27 20:43:30.026: W/System.err(574): at java.net.InetAddress.getAllByName(InetAddress.java:220)
02-27 20:43:30.026: W/System.err(574): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
02-27 20:43:30.036: W/System.err(574): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
02-27 20:43:30.036: W/System.err(574): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
02-27 20:43:30.046: W/System.err(574): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
02-27 20:43:30.046: W/System.err(574): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
02-27 20:43:30.046: W/System.err(574): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-27 20:43:30.055: W/System.err(574): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
02-27 20:43:30.055: W/System.err(574): at com.Prometheus.R1.JsonParsingActivity$DownloadWebPageTask.doInBackground(JsonParsingActivity.java:88)
02-27 20:43:30.055: W/System.err(574): at com.Prometheus.R1.JsonParsingActivity$DownloadWebPageTask.doInBackground(JsonParsingActivity.java:1)
02-27 20:43:30.055: W/System.err(574): at android.os.AsyncTask$2.call(AsyncTask.java:264)<br/>
02-27 20:43:30.066: W/System.err(574): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-27 20:43:30.066: W/System.err(574): at java.util.concurrent.FutureTask.run(FutureTask.java:137)<br/>
02-27 20:43:30.066: W/System.err(574): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-27 20:43:30.076: W/System.err(574): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-27 20:43:30.076: W/System.err(574): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-27 20:43:30.087: W/System.err(574): at java.lang.Thread.run(Thread.java:856)
02-27 20:43:30.108: W/System.err(574): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
02-27 20:43:30.116: W/System.err(574): at libcore.io.Posix.getaddrinfo(Native Method)
02-27 20:43:30.116: W/System.err(574): at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
02-27 20:43:30.126: W/System.err(574): at java.net.InetAddress.lookupHostByName(InetAddress.java:411)
02-27 20:43:30.126: W/System.err(574): ... 18 more
02-27 20:43:30.136: I/System.out(574): Except thrown by url http://search.twitter.com/search.json?q=javacodegeeks, ....
02-27 20:43:30.136: I/System.out(574): response =
अपवाद एक UnknownHostException के रूप में आप देख सकते हैं search.twitter.com ": नहीं पता होस्ट नाम के साथ जुड़े"
लेकिन मुझे नहीं लगता कि साइट अस्वीकार्य है कि ...
किसी को भी मुझे बता सकते हैं क्या हो रहा है + मैं क्या घ की जरूरत है ओ इसके माध्यम से पाने के लिए?
अपवाद और स्टैक ट्रेस क्या हैं? –
मैंने मूल प्रश्न में लॉगकैट जोड़ा, क्योंकि यह लंबा है। –
अनुमतियों को जोड़ने से यह मेरे लिए हल हो गया। लेकिन, इस लाइन को बदलना सुनिश्चित करें: '<उपयोग-अनुमति एंड्रॉइड: name =" android.permission.INTERNET "> उपयोग-अनुमति>' से '<उपयोग-अनुमति एंड्रॉइड: name =" android.permission.INTERNET "> उपयोग-अनुमति>' –