Java 分析异步任务时出错
我想在我的应用程序android中解析listview中的html页面,我正在为android开发。 我想这个应用程序解析一个html页面,但当我启动应用程序时,它崩溃了!我通过logcat得到了这个错误:Java 分析异步任务时出错,java,android,html,parsing,android-asynctask,Java,Android,Html,Parsing,Android 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
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异步任务的代码:
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);
}
}
私有类ParsingPaginaWeb扩展异步任务{
ArrayList titoli;//lista dei titoli
ArrayList Descriptioni;//lista delle Descriptioni
@凌驾
受保护的void onPreExecute()
{
//prima di eseguire il il Izzo gli arraylist
titoli=新的ArrayList();
descripioni=newarraylist();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
/*
*这是一个有效的语法分析。来吧,让我和你的朋友们一起分享吧
*奎斯托,里佩托,� 在坎比亚的quanto,独自一人
*基地内的completamente al sito da cui prendere i dati。
*
*
*在卡索·沃格利亚莫·普伦德里达拉之家,我是蒂托利
*论坛和相对论描述的变化。
*Quindi analizzando un po il codice html notiamo che:
*
*1-洛杉矶之家酒店� 在“表格列表”中组织表格
*
*2-所有“内部c”� 车身上的其他部件包括标题和内容。
*不感兴趣的内容
*
*3-所有国际组织都将“内容”视为国际组织的利益
*“窗口BG2”类,内容与数据重复
*
*4-所有国际性的利益相关者均应遵守本协议
*“受试者”的类别包括标题和标题标签
*请描述一下。
*
*Adesso abbiamo tutte le informazioni che ci servono per fare il
*/
试一试{
//注:控制进口货物
//all'INGISIO ci DEVEESSERE org.jsoup
//ricavo l'html della pagina con用户代理桌面(Chrome)
//e超时30000
Document doc=Jsoup.connect(“http://mega-search.me/search?k=")
.userAgent(“Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.22(KHTML,如Gecko)Chrome/25.0.1364.172 Safari/537.22”)
.timeout(30000.get();
//普伦多拉塔贝拉酒店
//(con.first()奥滕戈·伊尔·普里莫·莱门托(ottengo il primo elemento),在《尤尼科之家》(questo caso l'unico)中)
元素链接=文件选择(“.link”);
用于(元素链接:链接)
{
String href=link.attr(“href”);
元素标题=链接。选择(“.title”);
字符串标题=(links.size()>0)?links.get(0.toString():“”;
添加(标题);
descripioni.add(href);
}
//inserisco nei rispettivi阵列列表
}捕获(例外e){
//德尔埃切齐奥宫酒店
//最重要的信息是错误和错误(请参阅日志)
Log.e(“ESEMPIO”、“ERRORE-NEL解析”);
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
//dopo che ho eseguito il Datti nella列表视图
//usando il自定义数组adpater ParsingArrayAdapter
ParsingarayAdapter=新的ParsingarayAdapter(main activity.this,titoli,descripioni);
setAdapter(适配器);
}
}
- 您的库设置不正确
<uses-permission android:name="android.permission.INTERNET" />
OPTIONAL : <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
可选:
- 您的库设置不正确
<uses-permission android:name="android.permission.INTERNET" />
OPTIONAL : <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
可选:
日志似乎表明您缺少Jsoup库。我看不出您的asyncTask有任何问题,但我会检查jsoup是否正确导入,以及它是否工作正常谢谢,回复!我使用Android Studio,我想,我已经导入了很多库,如何做到这一点?我用build.gradle写。这:dependencies{compile'com.android.support:support-v4:13.0.0'编译文件('libs/jsoup-1.7.2.jar')}
将jar添加到libs
folderi完成了它,但要导入libs lib,需要在另一种模式下进行。这可能是相关的。gradle尚未使用,但要将jsoup添加到项目中,需要将jar添加到构建路径中(至少在eclipse中)。检查日志似乎表明您缺少Jsoup库。我看不出您的asyncTask有任何问题,但我会检查jsoup是否正确导入,以及它是否工作正常谢谢,回复!我使用Android Studio,我想,我已经导入了很多库,如何做到这一点?我用build.gradle写。这:dependencies{compile'com.android.support:support-v4:13.0.0'编译文件('libs/jsoup-1.7.2.jar')}
将jar添加到libs
folderi这样做了,但要导入libs-lib,它需要在另一种模式下进行可能这是相关的..还没有使用gradle,但要将jsoup添加到项目中,您需要将jar添加到buil中