Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分析异步任务时出错_Java_Android_Html_Parsing_Android Asynctask - Fatal编程技术网

Java 分析异步任务时出错

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

我想在我的应用程序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异步任务的代码:

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(适配器);
}
}
  • 您的库设置不正确
在Eclipse上:右键单击您的项目、属性、JAVA构建路径,在Order and Export选项卡中,勾选您的库。 然后在Eclipse的主菜单上,“Project”和“Clean”

如果应用程序需要连接到internet,请不要忘记将权限添加到清单中:

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

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

可选:
  • 您的库设置不正确
在Eclipse上:右键单击您的项目、属性、JAVA构建路径,在Order and Export选项卡中,勾选您的库。 然后在Eclipse的主菜单上,“Project”和“Clean”

如果应用程序需要连接到internet,请不要忘记将权限添加到清单中:

<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中