How to use Jsoup with Volley?

后端 未结 2 1264
盖世英雄少女心
盖世英雄少女心 2020-11-29 12:38

I have a working example with Jsoup and AsyncTask, and that works fine. I am just not satisfied with the performance. It takes 3-6 seconds to load a simple list page with te

2条回答
  •  爱一瞬间的悲伤
    2020-11-29 13:31

    With Stephan`s answer I have made some little modifications to this code and it looks like this. I have added UTF 8 support so it can read other languages and specified the retry policy.

    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() {
                        @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];
    }
    

提交回复
热议问题