Форум программистов, компьютерный форум CyberForum.ru

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

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

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

15.06.2014, 13:58. Просмотров 756. Ответов 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 минуту
Разрешение на интернет установлено.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 13:58     Ошибка при парсинге страницы сайта
Посмотрите здесь:
Ошибка при парсинге или как лучше сделать? Android
Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup Android
Android Вытянуть информацию с кода страницы сайта
Автофокус при загрузке страницы Android
Android Изменение ссылок на файлы при загрузке HTML страницы
Android Ошибка при запуске AsyncTask при нажатии на пункт ActionBar
Ошибка при при смене активити Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
15.06.2014, 14:16     Ошибка при парсинге страницы сайта #2
dfinchenko, нельзя лезть в интернет из UI потока. Используйте Thread или AsyncTask
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
15.06.2014, 16:20  [ТС]     Ошибка при парсинге страницы сайта #3
Подскажите пожалуйста как правильно сделать.
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);
        }
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);
* * * * }
Подскажите в чем причина? Заранее благодарен!
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 11:27     Ошибка при парсинге страницы сайта #6
Java
1
setTitle(Document document)

если это вызывающий метод, то тип переменной в нем писать не нужно
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 11:46  [ТС]     Ошибка при парсинге страницы сайта #7
Извините, я начинающий в этом нелегком деле, не могу понять...то есть не указывать в скобках?
Java
1
Document document
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 11:50     Ошибка при парсинге страницы сайта #8
первый. указывайте только саму переменную в данном случае document, ну и точку с запятой после скобок не мешало бы влепить.
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);
                 }
            }
        });
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);
                }
            });
        }
так как нельзя менять вью элементы не из основного потока
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 13:05  [ТС]     Ошибка при парсинге страницы сайта #11
Все бы вроде норм, но теперь вот ругается на:
The method getActivity() is undefined for the type MainActivity
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 13:13     Ошибка при парсинге страницы сайта #12
заменить getActivity() на this
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'
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
16.06.2014, 14:19     Ошибка при парсинге страницы сайта #14
dfinchenko, покажите код MainActivity
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;
        }
    }
    
 
}
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 15:16     Ошибка при парсинге страницы сайта #16
dfinchenko, рискну предположить, что вьюхи нужно в onCreate определять, а не сразу.
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 15:20  [ТС]     Ошибка при парсинге страницы сайта #17
KillAndEat, когда определяю в onCreate, тогда текствиев не видит метод вынесенный из onCreate.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
16.06.2014, 15:27     Ошибка при парсинге страницы сайта #18
Java
1
2
final Button butTest ;
     final TextView tvInfo;
вместо

Java
1
2
final Button butTest = (Button)findViewById(R.id.button1);
     final TextView tvInfo = (TextView)findViewById(R.id.textView1);
в начало onCreate дописать

Java
1
2
butTest = (Button)findViewById(R.id.button1);
     tvInfo = (TextView)findViewById(R.id.textView1);
dfinchenko
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 70
16.06.2014, 15:37  [ТС]     Ошибка при парсинге страницы сайта #19
Заработало приложение, но когда нажал на кнопку, чтобы получить title, сразу выбило приложение. Вот логкет:

06-16 11:33:57.371: I/dalvikvm(536): threadid=3: reacting to signal 3
06-16 11:33:57.421: I/dalvikvm(536): Wrote stack traces to '/data/anr/traces.txt'
06-16 11:33:57.871: I/dalvikvm(536): threadid=3: reacting to signal 3
06-16 11:33:57.911: I/dalvikvm(536): Wrote stack traces to '/data/anr/traces.txt'
06-16 11:33:58.341: D/gralloc_goldfish(536): Emulator without GPU emulation detected.
06-16 11:33:58.431: I/dalvikvm(536): threadid=3: reacting to signal 3
06-16 11:33:58.491: I/dalvikvm(536): Wrote stack traces to '/data/anr/traces.txt'
06-16 11:34:17.061: D/dalvikvm(536): GC_FOR_ALLOC freed 179K, 6% free 5776K/6087K, paused 82ms
06-16 11:34:17.121: D/dalvikvm(536): GC_FOR_ALLOC freed 2K, 7% free 5901K/6279K, paused 62ms
06-16 11:34:17.221: D/dalvikvm(536): GC_FOR_ALLOC freed 321K, 10% free 5861K/6471K, paused 60ms
06-16 11:34:17.811: D/dalvikvm(536): GC_CONCURRENT freed 302K, 7% free 6022K/6471K, paused 5ms+6ms
06-16 11:34:18.101: D/dalvikvm(536): GC_CONCURRENT freed 297K, 7% free 6197K/6663K, paused 7ms+7ms
06-16 11:34:18.961: D/dalvikvm(536): GC_CONCURRENT freed 261K, 7% free 6442K/6855K, paused 6ms+7ms
06-16 11:34:19.791: D/dalvikvm(536): GC_CONCURRENT freed 237K, 6% free 6743K/7111K, paused 6ms+9ms
06-16 11:34:20.671: D/dalvikvm(536): GC_CONCURRENT freed 299K, 6% free 6899K/7303K, paused 6ms+7ms
06-16 11:34:21.740: D/dalvikvm(536): GC_CONCURRENT freed 313K, 7% free 7095K/7559K, paused 6ms+7ms
06-16 11:34:22.570: D/AndroidRuntime(536): Shutting down VM
06-16 11:34:22.570: W/dalvikvm(536): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
06-16 11:34:22.590: E/AndroidRuntime(536): FATAL EXCEPTION: main
06-16 11:34:22.590: E/AndroidRuntime(536): java.lang.NullPointerException
06-16 11:34:22.590: E/AndroidRuntime(536): at com.example.app.MainActivity$2.run(MainActivity.java:67)
06-16 11:34:22.590: E/AndroidRuntime(536): at android.os.Handler.handleCallback(Handler.java:605)
06-16 11:34:22.590: E/AndroidRuntime(536): at android.os.Handler.dispatchMessage(Handler.java:92)
06-16 11:34:22.590: E/AndroidRuntime(536): at android.os.Looper.loop(Looper.java:137)
06-16 11:34:22.590: E/AndroidRuntime(536): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-16 11:34:22.590: E/AndroidRuntime(536): at java.lang.reflect.Method.invokeNative(Native Method)
06-16 11:34:22.590: E/AndroidRuntime(536): at java.lang.reflect.Method.invoke(Method.java:511)
06-16 11:34:22.590: E/AndroidRuntime(536): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-16 11:34:22.590: E/AndroidRuntime(536): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-16 11:34:22.590: E/AndroidRuntime(536): at dalvik.system.NativeStart.main(Native Method)
06-16 11:34:23.220: I/dalvikvm(536): threadid=3: reacting to signal 3
06-16 11:34:23.250: I/dalvikvm(536): Wrote stack traces to '/data/anr/traces.txt'
06-16 11:34:25.501: I/Process(536): Sending signal. PID: 536 SIG: 9

Помогите, пожалуйста! Просто хочу сделать приложение, которое будет парсить заголовки новости.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 08:17     Ошибка при парсинге страницы сайта
Еще ссылки по теме:
Android "Ошибка при синтаксическом анализе пакета" при скачивании файла
Android Ошибка при вычитании
Android Ошибка при запуске VM VB
Ошибка при запуске Android
Android Ошибка при компиляции

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

Или воспользуйтесь поиском по форуму:
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
17.06.2014, 08:17     Ошибка при парсинге страницы сайта #20
Подозреваю что дело все таки в потоке (thread exiting with uncaught exception). Попробуйте использовать AsyncTask.
Yandex
Объявления
17.06.2014, 08:17     Ошибка при парсинге страницы сайта
Ответ Создать тему
Опции темы

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