2013-11-27 3 views
1

Я попытался создать свое первое приложение для Android, для новостей в моей школе. Я использовал Jsoup, но приложение падает каждый раз. Проблема возникает только на этой веб-странице. Когда я вхожу в другой URL-адрес, он работает. Вот ссылка на страницу: http://www.marianum24.de/~aushang/index.html А вот мой код:При сбое приложения для Android при разборе одного конкретного сайта

private String loadXmlFromNetwork(String urlString) throws IOException { 

    Document doc = null; 
    StringBuilder htmlString = new StringBuilder(); 

    try { 
     doc = Jsoup.connect(urlString).get(); 
     htmlString.append(doc.body().text()); 
    } catch (IOException e) { 
     return getResources().getString(R.string.connection_error); 
    } 

    return htmlString.toString(); 
} 

И, наконец, мой журнал:

11-27 11:30:33.081: D/gralloc_goldfish(5227): Emulator without GPU emulation detected. 
11-27 11:30:35.251: D/dalvikvm(5227): GC_FOR_ALLOC freed 149K, 9% free 2768K/3024K, paused 51ms, total 51ms 
11-27 11:30:36.292: D/dalvikvm(5227): GC_FOR_ALLOC freed 398K, 15% free 2881K/3380K, paused 50ms, total 51ms 
11-27 11:30:37.411: D/dalvikvm(5227): GC_FOR_ALLOC freed 181K, 9% free 3215K/3496K, paused 59ms, total 59ms 
11-27 11:30:37.952: W/dalvikvm(5227): threadid=12: thread exiting with uncaught exception (group=0x414c4700) 
11-27 11:30:37.971: E/AndroidRuntime(5227): FATAL EXCEPTION: AsyncTask #1 
11-27 11:30:37.971: E/AndroidRuntime(5227): java.lang.RuntimeException: An error occured while executing doInBackground() 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.lang.Thread.run(Thread.java:841) 
11-27 11:30:37.971: E/AndroidRuntime(5227): Caused by: java.lang.NullPointerException 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at com.boldog.aushang.MainActivity.loadXmlFromNetwork(MainActivity.java:199) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at com.boldog.aushang.MainActivity.access$0(MainActivity.java:192) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at com.boldog.aushang.MainActivity$DownloadXmlTask.doInBackground(MainActivity.java:175) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at com.boldog.aushang.MainActivity$DownloadXmlTask.doInBackground(MainActivity.java:1) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
11-27 11:30:37.971: E/AndroidRuntime(5227):  ... 4 more 
11-27 11:30:42.774: I/Choreographer(5227): Skipped 78 frames! The application may be doing too much work on its main thread. 
11-27 11:31:28.801: I/Process(5227): Sending signal. PID: 5227 SIG: 9 

Я надеюсь, что вы можете сказать мне, где проблема.

+0

Прочтите журнал ошибок. Он показывает, что у вас есть исключение Null Pointer в строке 199. –

+0

provably doc.body() имеет значение null, и вы ловите только IOException. Вы должны понять, почему. Эта тема может быть полезна вам http://stackoverflow.com/questions/10245519/handling-connection-errors-and-jsoup – mihail

+0

Я проверил соединение, но код 200, и сообщение «ОК» – user3042432

ответ

0

Проверить MainActivity в строке 199. Есть что-то null.

Моя ставка на этой линии:

htmlString.append(doc.body().text()); 

Я думаю doc может быть null.

+0

извините, i 'm new at this all – user3042432

+0

Какую часть вы не поняли? –

+0

Я проверил, является ли Документ «нулевым». Кажется, все в порядке, 'butdoc.body()' is 'null' – user3042432

0

Возможно, проблема возникла при проверке. Проще говоря, вы передаете необработанный HTML-файл в свой объект Document, как если бы он был правильно отформатирован XML. Это не так. По данным службы проверки w3.org,

http://validator.w3.org/check?uri=http%3A%2F%2Fwww.marianum24.de%2F~aushang%2Findex.html&charset=%28detect+automatically%29&doctype=Inline&group=0

в это время, по крайней мере, 8 ошибок и 1 предупреждение с веб-сайтом.

Если бы я был вами, я бы запустил некоторые проверки, чтобы разобрать мой входной документ ПЕРЕД выполнением любой обработки на нем.

+0

Я сделал сейчас. 'doc.body()' is 'null', что-то вроде' doc.getElementsByClass («MsoNormalTable») 'не' null', но когда я пытаюсь 'doc.getElementsByClass (« MsoNormalTable »). text()', там это не содержание. 'doc.text()' также не является нулевым, но когда я пытаюсь получить текст, он содержит только «aushang». я не могу получить один единственный элемент, потому что элементы не имеют id. так что я могу сделать? – user3042432

+0

кажется, что я не могу получить текст из тела. но почему? – user3042432

+0

Как я уже упоминал, ваш исходный XML плохо написан. Хотя HTML должен быть совместим с XML, большинство веб-браузеров имеют свои собственные схемы ошибок, которые делают это ненужным. Почему бы просто не пропустить элемент, если вы читаете NULL? – chronodekar

Смежные вопросы