我有一个使用Jsoup和AsyncTask的工作示例,并且工作正常。我对表现不满意。加载带有文本和图像的简单列表页面需要3-6秒。
我想以某种方式提升表现......所以我偶然发现了凌空抽射。
任何人都可以用jsoup来解释使用排球吗?
我用它来获取包含特定URL的doc对象:
public Document GetDocument(String site) {
Document doc = Jsoup.connect(site).timeout(600000)
.data("query", "Java")
.userAgent("Mozilla")
.get();
return doc;
}
我想我只会用jsoup和连接/下载与凌空分析数据?我使用Jsoup.connect(网站).timeout(600000)我应该用排球吗?
任何人都可以使用volley和jsoup编写/链接一个简单的例子吗?
答案 0 :(得分:5)
任何人都可以使用volley和jsoup编写/链接一个简单的例子吗?
在幕后,Jsoup使用HttpUrlConnection
。此类已知Android平台上尚未解决的问题,错误和性能问题。
相反,首先使用Volley加载数据,然后使用Jsoup解析它。
private static RequestQueue myRequestQueue = null;
public Document GetDocument(String site) throws Exception {
final Document[] doc = new Document[1];
final CountDownLatch cdl = new CountDownLatch(1);
StringRequest documentRequest = new StringRequest( //
Request.Method.GET, //
site, //
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
doc[0] = Jsoup.parse(response);
cdl.countDown();
}
}, //
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Error handling
System.out.println("Houston we have a problem ... !");
error.printStackTrace();
}
} //
);
if (myRequestQueue == null) {
myRequestQueue = Volley.newRequestQueue(this);
}
// Add the request to the queue...
myRequestQueue.add(documentRequest);
// ... and wait for the document.
// NOTE: Be aware of user experience here. We don't want to freeze the app...
cdl.await();
return doc[0];
}
答案 1 :(得分:1)
根据Stephan的回答,我对这段代码做了一些修改,看起来像这样。我添加了UTF 8支持,因此它可以读取其他语言并指定重试策略。
private static RequestQueue myRequestQueue = null;
public Document GetDocument(String site) {
final Document[] doc = new Document[1];
final CountDownLatch cdl = new CountDownLatch(1);
try {
StringRequest documentRequest = new StringRequest( //
Request.Method.GET, //
site, //
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
String newStr = null;
try {
newStr = URLDecoder.decode(URLEncoder.encode(response, "iso8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
doc[0] = Jsoup.parse(newStr);
cdl.countDown();
}
}, //
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Error handling
System.out.println("Houston we have a problem ... !");
error.printStackTrace();
}
} //
);
if (myRequestQueue == null) {
myRequestQueue = Volley.newRequestQueue(MainActivity._Instance);
documentRequest.setRetryPolicy(new DefaultRetryPolicy(5000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
// Add the request to the queue...
myRequestQueue.add(documentRequest);
// ... and wait for the document.
// NOTA: Be aware of user experience here. We don't want to freeze the app...
cdl.await();
}
catch (Exception e) {
Log.d("TMS", "Error parsing page " + site);
e.printStackTrace();
return null;
}
return doc[0];
}