Android平臺上,你不應該問Jsoup下載任何東西給你。在引擎蓋下,Jsoup使用HttpUrlConnection
。這門課非常緩慢,並且有一些已知問題。
使用更快的替代方法:Volley。
這是您的文章中利用Volley的功能。在下面的示例代碼中,我使用CountDownLatch
來等待數據。
private static RequestQueue myRequestQueue = null;
public String pare(final String url) throws Exception {
final String[] doc = new String[1];
final CountDownLatch cdl = new CountDownLatch(1);
StringRequest documentRequest = new StringRequest(//
Request.Method.GET, //
url, //
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
doc[0] = Jsoup.parse(response).html();
cdl.coutDown();
}
}, //
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("MyActivity", "Error while fetching " + url, error);
}
} //
);
if (myRequestQueue == null) {
myRequestQueue = Volley.newRequestQueue(this);
}
// Add the request to the queue...
myRequestQueue.add(documentRequest);
// ... and wait for the document.
// NOTA: User experience can be a concern here. We shouldn't freeze the app...
cdl.await();
return doc[0];
}
如果我運行此代碼它會創建一個blanl屏幕,並且應用程序停止響應,我做錯了什麼? – user47823
@ user47823您正在使用的線程被'cdl.await()'阻止,這就是應用程序停止響應的原因。在另一個線程中調用'pare'。 – Stephan