Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
#1

Ошибка при парсинге страницы сайта - Программирование Android

15.06.2014, 13:58. Просмотров 804. Ответов 19
Метки нет (Все метки)

В методе онклик пишу:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    public void onClick(View v) {
            
                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);
            }
        });
При нажатии на кнопку приложение выбивает... Подскажите в чем проблема! Заранее благодарен!

Добавлено через 31 минуту
Разрешение на интернет установлено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 13:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при парсинге страницы сайта (Программирование Android):

Ошибка при парсинге или как лучше сделать? - Программирование Android
Ребята помогите пожалуйста. В папке assets у меня 7 txt. файлов.7 вопросов. По нажатию на кнопку, происходит парсинг каждого файла и...

Некорректное отображение текста при парсинге - Программирование Android
Здравствуйте! Друзья! Сразу оговорюсь, я новичок и в программировании, и на Вашем форуме. Поэтому заранее прошу понять и простить :). А...

Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup - Программирование Android
Есть вот такой код для загрузки и парсинга сайтов. Если сюда скормить левый адрес для загрузки или при обработки Jsoup будет непойми что,...

Вытянуть информацию с кода страницы сайта - Программирование Android
Всем привет! Нашел пример в интернете как сделать простое приложение, которое считывает температуру с сайта. По кнопке Button обновляет...

При парсинге сайта содержание в строке выводится не на языке сайта - PHP
Здравствуйте. Помогите решить проблему. Сайт в браузере на русском. Когда я его парсю все содержание в строке выводится на украинском?

.NET 4.x Кракозябры при парсинге страницы - C#
Получаю код страницы. С помощью регулярок извлекаю значение тэга заголовка страницы(<title>). Но в treeView выдаёт пустые строки....

19
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
15.06.2014, 14:16 #2
dfinchenko, нельзя лезть в интернет из UI потока. Используйте Thread или AsyncTask
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
15.06.2014, 16:20  [ТС] #3
Подскажите пожалуйста как правильно сделать.
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
15.06.2014, 23:39 #4
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Thread thread = new Thread(new Runnable() {
 
            @Override
            public void run() {
                try {
                    Document document = Jsoup.connect("http://developer.alexanderklimov.ru/android/")
                            .get();
                    setTitle(document);
                
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        
        public void setTitle(Document document){
        final String title = document.title();
            getActivity().runOnUiThread(new Runnable() {
                        
                @Override
                public void run() {
                tvInfo.setText(title);
                }
            });
        }
вот так например

Добавлено через 1 минуту
Если tvInfo обычная строка а не текствью как я подумал то последний метод можно заменить на

Java
1
2
3
4
public void setTitle(Document document){
       String title = document.title();
                tvInfo.setText(title);
        }
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 11:20  [ТС] #5
KillAndEat, спасибо огромное! Буду пробовать!

Добавлено через 11 часов 31 минуту
В методе эклипс ругается на скобки:
Java
1
setTitle(Document document)
Java
1
2
3
4
public void setTitle(Document document){
* * * *String title = document.title();
* * * * * * * * tvInfo.setText(title);
* * * * }
Подскажите в чем причина? Заранее благодарен!
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 11:27 #6
Java
1
setTitle(Document document)

если это вызывающий метод, то тип переменной в нем писать не нужно
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 11:46  [ТС] #7
Извините, я начинающий в этом нелегком деле, не могу понять...то есть не указывать в скобках?
Java
1
Document document
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 11:50 #8
первый. указывайте только саму переменную в данном случае document, ну и точку с запятой после скобок не мешало бы влепить.
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 12:08  [ТС] #9
Попробовал, но полезла куча ошибок. Вот полностью привожу код онклика...может что-то не так делаю:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  final Button butTest = (Button)findViewById(R.id.button1);
        final TextView tvInfo = (TextView)findViewById(R.id.textView1);
        
        butTest.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
            
                Thread thread = new Thread(new Runnable() {
                     
                    @Override
                    public void run() {
                        try {
                            Document document = Jsoup.connect("http://developer.alexanderklimov.ru/android/")
                                    .get();
                            setTitle(document);
                        
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
                thread.start();
                
              public void setTitle(document); {
                String title = document.title();
               tvInfo.setText(title);
                 }
            }
        });
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 12:13 #10
Java
1
2
3
4
  public void setTitle(Document document); {
                String title = document.title();
               tvInfo.setText(title);
                 }
вот так правильно.Этот метод нужно вынести из onCreate и переписать вот так

Java
1
2
3
4
5
6
7
8
9
10
 public void setTitle(Document document){
        final String title = document.title();
            getActivity().runOnUiThread(new Runnable() {
                        
                @Override
                public void run() {
                tvInfo.setText(title);
                }
            });
        }
так как нельзя менять вью элементы не из основного потока
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 13:05  [ТС] #11
Все бы вроде норм, но теперь вот ругается на:
The method getActivity() is undefined for the type MainActivity
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 13:13 #12
заменить getActivity() на this
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 13:21  [ТС] #13
Все норм, ошибок нет, но при запуске вылетает приложение...
В логкете пишет:
06-16 09:18:11.628: D/dalvikvm(554): Not late-enabling CheckJNI (already on)
06-16 09:18:12.148: I/dalvikvm(554): Turning on JNI app bug workarounds for target SDK version 10...
06-16 09:18:12.878: I/dalvikvm(554): threadid=3: reacting to signal 3
06-16 09:18:13.028: I/dalvikvm(554): Wrote stack traces to '/data/anr/traces.txt'
06-16 09:18:13.388: I/dalvikvm(554): threadid=3: reacting to signal 3
06-16 09:18:13.478: I/dalvikvm(554): Wrote stack traces to '/data/anr/traces.txt'
06-16 09:18:13.788: D/AndroidRuntime(554): Shutting down VM
06-16 09:18:13.788: W/dalvikvm(554): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
06-16 09:18:13.848: E/AndroidRuntime(554): FATAL EXCEPTION: main
06-16 09:18:13.848: E/AndroidRuntime(554): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.app/com.example.app.MainActivity}: java.lang.NullPointerException
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.os.Handler.dispatchMessage(Handler.java:99)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.os.Looper.loop(Looper.java:137)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-16 09:18:13.848: E/AndroidRuntime(554): at java.lang.reflect.Method.invokeNative(Native Method)
06-16 09:18:13.848: E/AndroidRuntime(554): at java.lang.reflect.Method.invoke(Method.java:511)
06-16 09:18:13.848: E/AndroidRuntime(554): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-16 09:18:13.848: E/AndroidRuntime(554): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-16 09:18:13.848: E/AndroidRuntime(554): at dalvik.system.NativeStart.main(Native Method)
06-16 09:18:13.848: E/AndroidRuntime(554): Caused by: java.lang.NullPointerException
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.Activity.findViewById(Activity.java:1794)
06-16 09:18:13.848: E/AndroidRuntime(554): at com.example.app.MainActivity.<init>(MainActivity.java:22)
06-16 09:18:13.848: E/AndroidRuntime(554): at java.lang.Class.newInstanceImpl(Native Method)
06-16 09:18:13.848: E/AndroidRuntime(554): at java.lang.Class.newInstance(Class.java:1319)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
06-16 09:18:13.848: E/AndroidRuntime(554): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
06-16 09:18:13.848: E/AndroidRuntime(554): ... 11 more
06-16 09:18:13.888: I/dalvikvm(554): threadid=3: reacting to signal 3
06-16 09:18:13.938: I/dalvikvm(554): Wrote stack traces to '/data/anr/traces.txt'
06-16 09:18:14.399: I/dalvikvm(554): threadid=3: reacting to signal 3
06-16 09:18:14.488: I/dalvikvm(554): Wrote stack traces to '/data/anr/traces.txt'
06-16 09:18:14.619: I/dalvikvm(554): threadid=3: reacting to signal 3
06-16 09:18:14.709: I/dalvikvm(554): Wrote stack traces to '/data/anr/traces.txt'
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.06.2014, 14:19 #14
dfinchenko, покажите код MainActivity
1
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 14:58  [ТС] #15
Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package com.example.app;
import java.io.IOException;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
 
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends ActionBarActivity {
    
     
     final Button butTest = (Button)findViewById(R.id.button1);
     final TextView tvInfo = (TextView)findViewById(R.id.textView1);
   
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
       
        
        butTest.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
            
                Thread thread = new Thread(new Runnable() {
                     
                    @Override
                    public void run() {
                        try {
                            Document document = Jsoup.connect("http://developer.alexanderklimov.ru/android/")
                                    .get();
                            setTitle(document);
                        
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
                thread.start();
             
                
              
            }
        });
        
      }
    public void setTitle(Document document){
            final String title = document.title();
                this.runOnUiThread(new Runnable() {
                            
                    @Override
                    public void run() {
                    tvInfo.setText(title);
                    }
                });
    }
    
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
 
        public PlaceholderFragment() {
        }
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }
    }
    
 
}
0
16.06.2014, 14:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2014, 14:58
Привет! Вот еще темы с ответами:

Запуск скрипта при парсинге страницы - C#
Есть некоторый сайт с таблицей, которую необходимо пропарсить и записать данные в бд. Таблица состоит из записей и страниц, первая...

Слетела кодировка при парсинге html-страницы - C#
Здравствуйте! Начал писать программу которая парсит сайт. В заголовке html-страницы указана следующая кодировка: &lt;meta...

Неверное регулярное выражение при парсинге страницы - C#
Имеется страница такой разметки: &lt;tr class=&quot;lutr&quot;&gt; 15 26 37 48 &lt;/tr&gt; &lt;tr class=&quot;lutr&quot;&gt; 1 ...

Избавление от &_shy_; при парсинге страницы - C#
Доброго времени суток. Пытаюсь спарсить страницу вот таким вот кодом WebClient wClient = new WebClient(); wClient.Encoding =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.