gpt4 book ai didi

java - 解析 AsyncTask 时出错

转载 作者:行者123 更新时间:2023-11-30 03:23:40 24 4
gpt4 key购买 nike

我想在我的应用程序 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 构建路径,在“订购和导出”选项卡中,勾选您的库。然后在Eclipse的主菜单上,“Project”和“Clean”

如果您的应用程序需要连接到互联网,请不要忘记将 PERMISSION 添加到 list 中:

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

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

关于java - 解析 AsyncTask 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com