Jsoup парсинга html страниц из интернета

Ответить
tanchik
Сообщения: 57
Зарегистрирован: 21 сен 2012, 15:15

Jsoup парсинга html страниц из интернета

Сообщение tanchik » 21 сен 2012, 20:25

Здравствуйте! я веб программист, андроид приложение решила писать недавно, соответственно и java только недели две изучаю, так что не судите строго - прошу о помощи.
Используя Jsoup парсер по этому примеру
http://developer.alexanderklimov.ru/and ... /jsoup.php
не получается парсить интернет страницу

Код: Выделить всё

Document doc = null;
        try {
        	doc = Jsoup.connect("http://developer.alexanderklimov.ru/android/").get();
        } catch (IOException e) {
        	// TODO Auto-generated catch block
        	e.printStackTrace();
        }
        String title = doc.title();
        tvInfo.setText(title);
ругается на строку

Код: Выделить всё

doc = Jsoup.connect("http://developer.alexanderklimov.ru/android/").get();
вот так
09-21 17:22:32.316: E/AndroidRuntime(1767): at com.example.active_talk.MainActivity.onCreate(MainActivity.java:128)
не могу понять, что это значит, предполагаю, что на метод ругается.Подскажите пожалуйста :oops: Заранее благодарю!

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Jsoup парсинга html страниц из интернета

Сообщение AndreyI » 21 сен 2012, 20:38

В Манифесте добавили разрешение на доступ в Интернет?

tanchik
Сообщения: 57
Зарегистрирован: 21 сен 2012, 15:15

Re: Jsoup парсинга html страниц из интернета

Сообщение tanchik » 21 сен 2012, 20:47

AndreyI писал(а):В Манифесте добавили разрешение на доступ в Интернет?
да в манифесте прописано так

Код: Выделить всё

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.active_talk"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
   

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MenuActivity"
            android:label="@string/title_activity_menu" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Jsoup парсинга html страниц из интернета

Сообщение AndreyI » 21 сен 2012, 20:58

Значит здесь другая проблема, дело в том, что в более свежих Андроид стоит запрет на доступ в Интернет из основного (UI) потока. Т.е. нужно создавать другой поток и в нем уже коннектиться.

Попробуйте перестроить проект с Андроид API , скажем, 8. (меню Project->Properties-Android там поменяйте Project Build Target). Если пойдет, значит дело было в этом.

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Jsoup парсинга html страниц из интернета

Сообщение Finch » 21 сен 2012, 21:15

tanchik, асинктаск юзай =)
Про6уй что-то тип такого.

Код: Выделить всё

class AsyncLoad extends AsyncTask<String, Void, String> {

                private ProgressDialog mProgressDialog;

		@Override
		protected String doInBackground(String... params) {
			publishProgress(new Void[] {});
				try {
					doc = Jsoup.connect(params[0]).get();
				} catch (IOException e e) {
					e.printStackTrace();
				}
			return doc.title();
		}

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			mProgressDialog = new ProgressDialog(Имя_активити.this);
			mProgressDialog
					.setMessage("Загрузка...");
			mProgressDialog.show();
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
                        tvInfo.setText(result);
			mProgressDialog.dismiss();
		}
	}
П.С. ах и да запускай когда те6е надо

Код: Выделить всё

new AsyncLoad.execute("http://developer.alexanderklimov.ru/android/");
CEO of a company R.id.team

tanchik
Сообщения: 57
Зарегистрирован: 21 сен 2012, 15:15

Re: Jsoup парсинга html страниц из интернета

Сообщение tanchik » 24 сен 2012, 08:26

AndreyI писал(а):Значит здесь другая проблема, дело в том, что в более свежих Андроид стоит запрет на доступ в Интернет из основного (UI) потока. Т.е. нужно создавать другой поток и в нем уже коннектиться.

Попробуйте перестроить проект с Андроид API , скажем, 8. (меню Project->Properties-Android там поменяйте Project Build Target). Если пойдет, значит дело было в этом.
Да, совершенно верно, AndreyI дело было именно в этом.Спасибо огромное.Буду разбираться с потоками ;)

tanchik
Сообщения: 57
Зарегистрирован: 21 сен 2012, 15:15

Re: Jsoup парсинга html страниц из интернета

Сообщение tanchik » 24 сен 2012, 08:28

Finch писал(а):tanchik, асинктаск юзай =)
Интересная штука, попробую =). Спасибо!

tanchik
Сообщения: 57
Зарегистрирован: 21 сен 2012, 15:15

Re: Jsoup парсинга html страниц из интернета

Сообщение tanchik » 24 сен 2012, 08:53

У меня еще вопрос, пытаюсь то же самое проделать, что в примере, только с сайтом на https, выдает ошибку:
the application ... has stopped unexpectedly.please try again
Что делать?Спасибо!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Jsoup парсинга html страниц из интернета

Сообщение rezak90 » 04 окт 2012, 19:44

tanchik писал(а):У меня еще вопрос, пытаюсь то же самое проделать, что в примере, только с сайтом на https, выдает ошибку:
the application ... has stopped unexpectedly.please try again
Что делать?Спасибо!
это обобщённая ошибка в андроиде, показывайте нам лог ошибок с эклипса
R.id.team
Политика на форуме запрещена

tanchik
Сообщения: 57
Зарегистрирован: 21 сен 2012, 15:15

Re: Jsoup парсинга html страниц из интернета

Сообщение tanchik » 11 окт 2012, 09:08

Все получилось, спасибо!

Xpert043
Сообщения: 34
Зарегистрирован: 12 июн 2012, 20:13

Re: Jsoup парсинга html страниц из интернета

Сообщение Xpert043 » 30 апр 2013, 23:49

А почему не работает такой простой код? Парсинг из инета пока не трогаем...
Код:
[syntax=java]package com.example.projecta;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

MyTask mt;
TextView tvInfo;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvInfo = (TextView) findViewById(R.id.tvInfo);
}

public void onclick(View v) {
mt = new MyTask();
mt.execute();
}

class MyTask extends AsyncTask<String,Void, String> {

@Override
protected void onPreExecute() {
super.onPreExecute();
tvInfo.setText("Begin");
}

protected String doInBackground(String... links) {
//Document doc = null;

String html = "<html><head><title>Коты учатся кодить</title></head>,"
+ "<body><p>Коты умеют <del>ш</del>кодить.<br> Они великие программисты." +
"<p>А еще они умеют мяукать.</p>" +
"<a href='http://developer.alexanderklimov.ru'>Подробности здесь</a>" +
"</body></html>";
Document doc = Jsoup.parse(html);
return doc.html();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
tvInfo.setText(result);
}
}
}[/syntax]
Приложение просто вылетает с ошибкой...
Последний раз редактировалось Xpert043 01 май 2013, 02:26, всего редактировалось 1 раз.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Jsoup парсинга html страниц из интернета

Сообщение Mikhail_dev » 01 май 2013, 01:18

Не забывайте про истину "правильно заданный вопрос = 50 процентов ответа." Укажи саму ошибку. С ходу не вижу тут проблемы. И да, почему head не закрыт?

Xpert043
Сообщения: 34
Зарегистрирован: 12 июн 2012, 20:13

Re: Jsoup парсинга html страниц из интернета

Сообщение Xpert043 » 01 май 2013, 02:25

head не закрыт это не важно. Библиотека все равно должна выводить.
Делаю http://developer.alexanderklimov.ru/and ... /jsoup.php урок, только асинхронный метод.
Вот ошибки:

Код: Выделить всё

04-30 23:20:45.635: E/Trace(801): error opening trace file: No such file or directory (2)
04-30 23:20:46.746: D/gralloc_goldfish(801): Emulator without GPU emulation detected.
04-30 23:20:47.296: I/Choreographer(801): Skipped 49 frames!  The application may be doing too much work on its main thread.
04-30 23:20:47.416: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:20:49.686: I/Choreographer(801): Skipped 30 frames!  The application may be doing too much work on its main thread.
04-30 23:20:50.415: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:20:50.985: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:20:57.955: I/Choreographer(801): Skipped 33 frames!  The application may be doing too much work on its main thread.
04-30 23:21:00.145: I/Choreographer(801): Skipped 42 frames!  The application may be doing too much work on its main thread.
04-30 23:21:00.895: I/Choreographer(801): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-30 23:21:02.156: I/Choreographer(801): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-30 23:21:03.396: I/Choreographer(801): Skipped 30 frames!  The application may be doing too much work on its main thread.
04-30 23:21:05.016: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:21:07.115: I/Choreographer(801): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-30 23:21:11.626: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:21:12.786: I/Choreographer(801): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-30 23:21:19.116: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:21:19.856: I/Choreographer(801): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-30 23:21:20.569: I/Choreographer(801): Skipped 50 frames!  The application may be doing too much work on its main thread.
04-30 23:21:20.886: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:21:21.715: I/Choreographer(801): Skipped 31 frames!  The application may be doing too much work on its main thread.
04-30 23:21:24.125: I/Choreographer(801): Skipped 30 frames!  The application may be doing too much work on its main thread.
04-30 23:21:29.755: I/Choreographer(801): Skipped 32 frames!  The application may be doing too much work on its main thread.
04-30 23:21:30.465: I/Choreographer(801): Skipped 68 frames!  The application may be doing too much work on its main thread.
04-30 23:21:30.738: I/dalvikvm(801): Could not find method org.jsoup.Jsoup.parse, referenced from method com.example.projecta.MainActivity$MyTask.doInBackground
04-30 23:21:30.738: W/dalvikvm(801): VFY: unable to resolve static method 3567: Lorg/jsoup/Jsoup;.parse (Ljava/lang/String;)Lorg/jsoup/nodes/Document;
04-30 23:21:30.756: D/dalvikvm(801): VFY: replacing opcode 0x71 at 0x0002
04-30 23:21:30.765: W/dalvikvm(801): threadid=11: thread exiting with uncaught exception (group=0x40a71930)
04-30 23:21:30.775: E/AndroidRuntime(801): FATAL EXCEPTION: AsyncTask #1
04-30 23:21:30.775: E/AndroidRuntime(801): java.lang.RuntimeException: An error occured while executing doInBackground()
04-30 23:21:30.775: E/AndroidRuntime(801): 	at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.util.concurrent.FutureTask.run(FutureTask.java:239)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.lang.Thread.run(Thread.java:856)
04-30 23:21:30.775: E/AndroidRuntime(801): Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup
04-30 23:21:30.775: E/AndroidRuntime(801): 	at com.example.projecta.MainActivity$MyTask.doInBackground(MainActivity.java:44)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at com.example.projecta.MainActivity$MyTask.doInBackground(MainActivity.java:1)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-30 23:21:30.775: E/AndroidRuntime(801): 	at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-30 23:21:30.775: E/AndroidRuntime(801): 	... 4 more
04-30 23:21:30.775: I/Choreographer(801): Skipped 49 frames!  The application may be doing too much work on its main thread.
04-30 23:21:32.066: I/Choreographer(801): Skipped 94 frames!  The application may be doing too much work on its main thread.
04-30 23:21:32.336: I/Choreographer(801): Skipped 50 frames!  The application may be doing too much work on its main thread.
04-30 23:21:32.485: I/Choreographer(801): Skipped 36 frames!  The application may be doing too much work on its main thread.
04-30 23:21:32.685: I/Choreographer(801): Skipped 50 frames!  The application may be doing too much work on its main thread.
04-30 23:21:32.875: I/Choreographer(801): Skipped 48 frames!  The application may be doing too much work on its main thread.
04-30 23:21:33.305: I/Choreographer(801): Skipped 36 frames!  The application may be doing too much work on its main thread.
04-30 23:21:33.846: I/Process(801): Sending signal. PID: 801 SIG: 9

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Jsoup парсинга html страниц из интернета

Сообщение rezak90 » 01 май 2013, 10:35

Не находит класс, не правильно подключена либа
R.id.team
Политика на форуме запрещена

Xpert043
Сообщения: 34
Зарегистрирован: 12 июн 2012, 20:13

Re: Jsoup парсинга html страниц из интернета

Сообщение Xpert043 » 01 май 2013, 10:46

Спасибо. Разобрался!

Ответить