Tôi đã làm việc trên một dự án Android và tôi đang ở một điểm mà tôi muốn hỏi một số API để biết thông tin. Có vẻ như điều này rất cơ bản!HttpResponse sử dụng vấn đề android: thực hiện luôn luôn gây ra ngoại lệ?
Dưới đây là các ý chính chung của mã của tôi:
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;
}
nơi biến url là chuỗi "http://search.twitter.com/search.json?q=javacodegeeks".
Như bạn có thể thấy có một số thông tin JSON đẹp tại trang web đó; Vấn đề của tôi là mỗi lần '' client.execute (getRequest); '' được gọi, chương trình sẽ ném và bắt một ngoại lệ. Không hữu ích!
Tôi đã nghe hai điều:
1) Bạn phải đặt quyền cho trình giả lập/thiết bị sử dụng internet! - Tôi nghĩ rằng tôi đã đề cập đến điều này, nhưng có lẽ tôi đã làm sai! Trong androidmanifest.xml tôi đã thêm
Vậy là có.
2) (mà tôi không chắc chắn về) bạn không thể bắt đầu chuỗi 'nối mạng' trong chuỗi 'ui'. Tôi không hoàn toàn chắc chắn điều này có nghĩa là gì, nhưng tôi đã đi trước và làm theo một số hướng dẫn về Android Threads, Handlers và AsyncTasks. Ở đây: Xin vui lòng kiểm tra mã dưới sự hướng dẫn AsyncTask, mà tôi theo:
http://www.vogella.de/articles/AndroidPerformance/article.html
Sau khi làm theo cùng với các hướng dẫn AsyncTask, tôi thấy rằng tôi vẫn có cùng problem--
dòng : HttpGet httpGet = new HttpGet (url) luôn ném một ngoại lệ, như trước đây.
Đây là logcat từ nỗ lực của tôi với hướng dẫn luồng trên:
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 =
Trường hợp ngoại lệ là một UnknownHostException như bạn có thể thấy:
"ava.net.UnknownHostException: Không thể giải quyết host" search.twitter.com ": Không có địa chỉ nào được liên kết với tên máy chủ"
Nhưng tôi không nghĩ rằng trang web là không thể chấp nhận được ...
Bất cứ ai có thể cho tôi biết điều gì đang xảy ra + những gì tôi cần o để vượt qua nó?
ngoại lệ và theo dõi ngăn xếp là gì? –
Tôi đã thêm logcat vào câu hỏi origional, vì nó dài. –
Thêm quyền đã giải quyết nó cho tôi. Tuy nhiên, hãy chắc chắn thay đổi dòng này: ' uses-permission>' to ' uses-permission>' –