簡體   English   中英

解析AsyncTask時出錯

[英]Error Parsing AsyncTask

我想在我的應用程序android中的listview中解析一個html頁面,我正在為android開發。 我希望該應用程序解析一個html頁面,但是當我啟動該應用程序時會崩潰! 我通過logcat得到了這個錯誤:

09-05 20:59:29.734      983-999/com.app.myapplication E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
        java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
        at java.util.concurrent.FutureTask.run(FutureTask.java:239)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
        at java.lang.Thread.run(Thread.java:856)
        Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup
        at com.app.myapplication.MainActivity$ParsingPaginaWeb.doInBackground(MainActivity.java:84)
        at com.app.myapplication.MainActivity$ParsingPaginaWeb.doInBackground(MainActivity.java:39)
        at android.os.AsyncTask$2.call(AsyncTask.java:287)
        at java.util.concurrent.FutureTask.run(FutureTask.java:234)

這是代碼Java AsyncTask:

private class ParsingPaginaWeb extends AsyncTask<String,String,String> {

        ArrayList<String> titoli; //lista dei titoli
        ArrayList<String> descrizioni; //lista delle descrizioni

        @Override
        protected void onPreExecute()
        {
            //prima di eseguire il parsing inizializzo gli arraylist
            titoli = new ArrayList<String>();
            descrizioni = new ArrayList<String>();
        }

        @Override
        protected String doInBackground(String... params) {
            /*
             * Qui si effettua il parsing. Come esempio prendiamo il sito di anddev.it
             * Questo, lo ripeto, � solo un esempio, in quanto il parsing cambia 
             * completamente in base al sito da cui prendere i dati.
             * 
             * 
             * In questo caso vogliamo prendere dalla home di anddev.it i titoli
             * delle varie sezioni del forum e la relativa descrizione.
             * Quindi analizzando un po il codice html notiamo che:
             * 
             * 1- La home � organizzata in tabella con classe "table_list"
             * 
             * 2- All'interno c'� una alternanza di tbody con classe header e content. 
             *    A noi interessano quelli con classe content 
             *   
             * 3- All'interno di ogni tbody con classe "content" ci interessa ogni riga con 
             *    classe "windowbg2", che contengono i dati da recuperare
             * 
             * 4- All'interno di ogni riga ci interessa il testo contenuto nel tag <a> con 
             *    classe "subject" che contiene il titolo e quello nel tag <p> 
             *    che contiene la descrizione. 
             *    
             * Adesso abbiamo tutte le informazioni che ci servono per fare il parsing
             */
            try {
                // NB: controllate di importare le classi giuste
                // all'inizio ci deve essere org.jsoup

                // ricavo l'html della pagina con user agent desktop (Chrome) 
                // e timeout 30000
                Document doc = Jsoup.connect("http://mega-search.me/search?k=")
                        .userAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22")
                        .timeout(30000).get();

                // prendo la tabella 
                // (con .first() ottengo il primo elemento, in questo caso l'unico )
                Elements links = doc.select(".link");
                for( Element link: links )
                {
                    String href = link.attr("href");
                    Elements titles = link.select( ".title" );
                    String title = ( links.size() > 0 ) ? links.get( 0 ).toString() : "";
                    titoli.add(title);
                    descrizioni.add(href);
                }
                        // inserisco nei rispettivi arraylist



            } catch (Exception e) {
                // gestione dell'eccezione
                // ad esempio mostrare messaggio di errore o altro (qui nel logcat)
                Log.e("ESEMPIO", "ERRORE NEL PARSING");
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result)
        {
            // dopo che ho eseguito il parsing mostro i dati nella listview
            // usando il custom array adpater ParsingArrayAdapter

            ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli, descrizioni);
            lista.setAdapter(adapter);
        }

    }
  • 您的媒體庫設置不正確。

在Eclipse上:右鍵單擊項目,屬性,JAVA Build Paths,在“順序和導出”選項卡中,勾選您的庫。 然后在Eclipse的主菜單上,選擇“項目”和“清潔”

如果您的應用程序需要連接到Internet,請不要忘記將PERMISSION添加到Manifest中:

<uses-permission android:name="android.permission.INTERNET" />

OPTIONAL : <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM