Помогите с ошибкой
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 17:32
Помогите с ошибкой
создал новый проект, поместил одну кнопку и в главном классе написал всего одну строчку
View btn = findViewById(R.id.button1);
теперь каждый раз при компиляции приложение сразу вылетает, с другими новыми проектами всё так же
вот логи:
01-03 10:22:39.556: D/AndroidRuntime(334): Shutting down VM
01-03 10:22:39.556: W/dalvikvm(334): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-03 10:22:39.606: E/AndroidRuntime(334): FATAL EXCEPTION: main
01-03 10:22:39.606: E/AndroidRuntime(334): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ru.karick.test_7/ru.karick.test_7.MainActivity}: java.lang.NullPointerException
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.os.Looper.loop(Looper.java:123)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.main(ActivityThread.java:3683)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.reflect.Method.invoke(Method.java:507)
01-03 10:22:39.606: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-03 10:22:39.606: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-03 10:22:39.606: E/AndroidRuntime(334): at dalvik.system.NativeStart.main(Native Method)
01-03 10:22:39.606: E/AndroidRuntime(334): Caused by: java.lang.NullPointerException
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.Activity.findViewById(Activity.java:1647)
01-03 10:22:39.606: E/AndroidRuntime(334): at ru.karick.test_7.MainActivity.<init>(MainActivity.java:15)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.Class.newInstanceImpl(Native Method)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.Class.newInstance(Class.java:1409)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
01-03 10:22:39.606: E/AndroidRuntime(334): ... 11 more
View btn = findViewById(R.id.button1);
теперь каждый раз при компиляции приложение сразу вылетает, с другими новыми проектами всё так же
вот логи:
01-03 10:22:39.556: D/AndroidRuntime(334): Shutting down VM
01-03 10:22:39.556: W/dalvikvm(334): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-03 10:22:39.606: E/AndroidRuntime(334): FATAL EXCEPTION: main
01-03 10:22:39.606: E/AndroidRuntime(334): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ru.karick.test_7/ru.karick.test_7.MainActivity}: java.lang.NullPointerException
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.os.Looper.loop(Looper.java:123)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.main(ActivityThread.java:3683)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.reflect.Method.invoke(Method.java:507)
01-03 10:22:39.606: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-03 10:22:39.606: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-03 10:22:39.606: E/AndroidRuntime(334): at dalvik.system.NativeStart.main(Native Method)
01-03 10:22:39.606: E/AndroidRuntime(334): Caused by: java.lang.NullPointerException
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.Activity.findViewById(Activity.java:1647)
01-03 10:22:39.606: E/AndroidRuntime(334): at ru.karick.test_7.MainActivity.<init>(MainActivity.java:15)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.Class.newInstanceImpl(Native Method)
01-03 10:22:39.606: E/AndroidRuntime(334): at java.lang.Class.newInstance(Class.java:1409)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-03 10:22:39.606: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
01-03 10:22:39.606: E/AndroidRuntime(334): ... 11 more
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Помогите с ошибкой
Может всё таки так?View btn = findViewById(R.id.button1);
[syntax=java5]Button btn = (Button) findViewById(R.id.button1);[/syntax]
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 17:32
Re: Помогите с ошибкой
Может всё таки так?
[syntax=java5]Button btn = (Button) findViewById(R.id.button1);[/syntax]
так я уже пробывал, не в этом дело
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Помогите с ошибкой
Дело может не в этом, но поиск кнопки таким образом, которым Вы ищете приведет к ClassCastException, к гадалке не ходи. Я решил написать первое, что заметил в данном коде. А ошибка вылазит по причине того, что Вы ссылаетесь на другую кнопку, которая находится в другом XML файле (в другом, это НЕ в том, который Вы указали в методе setContentView(someXMLFile)). Если она даже и есть там, то возможно у вас ID пересекаются с одним из файлов. Советую изменить ID на более понятный.
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 17:32
Re: Помогите с ошибкой
id совподают, xml файл всего один, я уже пытался менять id или делать правки в таком духе, мои попытки ни к чему иному не приводят.
всё что я заметил так это что ошибка появляется только когда я пытаюсь обратиться к кнопке из кода
всё что я заметил так это что ошибка появляется только когда я пытаюсь обратиться к кнопке из кода
Re: Помогите с ошибкой
Что у вас в 15 строке класса MainActivity?
[ОФФТОП]Все таки мне кажется стоит указать в пререквизитах к урокам, что необходимо знание основ программирования и понимание java.
[ОФФТОП]Все таки мне кажется стоит указать в пререквизитах к урокам, что необходимо знание основ программирования и понимание java.
Re: Помогите с ошибкой
это странно, но допустимо и ошибку компиляции не вызывает. Только не спрашивайте зачем человек мог такое написать, другое дело, что указание (Button) в данном случае излишне, система сама определит тип.m090050 писал(а):Может всё таки так?View btn = findViewById(R.id.button1);
[syntax=java5]Button btn = (Button) findViewById(R.id.button1);[/syntax]
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Помогите с ошибкой
Так то оно да, надо указывать что следует знать основы ООП и Java, но думаю это не тот случай. 15 строка это как я понял та строка, что указал автор (View btn = findViewById(R.id.button1);).
Боюсь тут проблема IDE может быть. Попробуйте пересобрать проект, а также очистить, если это Eclipse. У меня были подобные проблемы, они были связаны именно с IDE, а если точнее, то с неправильной сборкой проекта.
Боюсь тут проблема IDE может быть. Попробуйте пересобрать проект, а также очистить, если это Eclipse. У меня были подобные проблемы, они были связаны именно с IDE, а если точнее, то с неправильной сборкой проекта.
Я всё понимаю, что не вызывает. А вот что система сама определит тип, это неправда. Она просто приведет нашу кнопку к суперклассу, к View. Т.е. Java дает возможность приводить унаследованные классы к суперклассам, но не наоборот. Т.е. View никогда автоматом не будет приведена к Button, к тому же каким образом она может быть приведена к нему, когда мы пишем "View btn" ?это странно, но допустимо и ошибку компиляции не вызывает. Только не спрашивайте зачем человек мог такое написать, другое дело, что указание (Button) в данном случае излишне, система сама определит тип.
Последний раз редактировалось Mikhail_dev 03 янв 2014, 14:34, всего редактировалось 1 раз.
Re: Помогите с ошибкой
Судя по ошибке - просто класса нет в Манифесте. Опять же если класс объявлен как абстрактный - та же байда. + Не стоит забывать, что делать это нужно в методе onCreate.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Помогите с ошибкой
Я всё понимаю, что не вызывает. А вот что система сама определит тип, это неправда. Она просто приведет нашу кнопку к суперклассу, к View. Т.е. Java дает возможность приводить унаследованные классы к суперклассам, но не наоборот. Т.е. View никогда автоматом не будет приведена к Button, к тому же каким образом она может быть приведена к нему, когда мы пишем "View btn" ?это странно, но допустимо и ошибку компиляции не вызывает. Только не спрашивайте зачем человек мог такое написать, другое дело, что указание (Button) в данном случае излишне, система сама определит тип.
Там другая ошибка вылазит, которая явно показывает, что в манифесте про активность нет информации.Судя по ошибке - просто класса нет в Манифесте. Опять же если класс объявлен как абстрактный - та же байда. + Не стоит забывать, что делать это нужно в методе onCreate.
Делать что? findViewById??+ Не стоит забывать, что делать это нужно в методе onCreate.
Re: Помогите с ошибкой
Я имел в виду. что кнопка будет работать нормально, поскольку R.id.button - объект Button, в данном случае во время компиляции объект View будет приведен к классу наследникаm090050 писал(а):Я всё понимаю, что не вызывает. А вот что система сама определит тип, это неправда. Она просто приведет нашу кнопку к суперклассу, к View. Т.е. Java дает возможность приводить унаследованные классы к суперклассам, но не наоборот. Т.е. View никогда автоматом не будет приведена к Button, к тому же каким образом она может быть приведена к нему, когда мы пишем "View btn" ?это странно, но допустимо и ошибку компиляции не вызывает. Только не спрашивайте зачем человек мог такое написать, другое дело, что указание (Button) в данном случае излишне, система сама определит тип.Там другая ошибка вылазит, которая явно показывает, что в манифесте про активность нет информации.Судя по ошибке - просто класса нет в Манифесте. Опять же если класс объявлен как абстрактный - та же байда. + Не стоит забывать, что делать это нужно в методе onCreate.
В данном случае в ошибке четко сказано - не могу инстанциировать активити - NullPointerException, т.е. обращение к не существующему объекту, учитывая то, как вы говорите в строке 15(где возбужденно исключение) код обращения к кнопке - именно эта ошибка будет если делать это до вызова метода onCreate/
p.s. опять же зачем гадать я уже более 13 причин нашел подобной ошибки, нужно видеть проект - иначе это все бесполезно.
Последний раз редактировалось altwin 03 янв 2014, 14:46, всего редактировалось 1 раз.
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 17:32
Re: Помогите с ошибкой
я уже переустанавливал эклипс, проверял манифест файл (несмотря на то что это MainActivity), всё четно
Re: Помогите с ошибкой
в данном случае - да. Не создавать объект view до вызова метода onCreatem090050 писал(а): Делать что? findViewById??
Последний раз редактировалось altwin 03 янв 2014, 14:47, всего редактировалось 1 раз.
Re: Помогите с ошибкой
Уверенны? покажите структуру проекта, содержание MainActivity, layout файла и манифеста, экстрасенсов тут мало, а причин это ошибки я штук 10 назвать могу.andrei.zik писал(а):я уже переустанавливал эклипс, проверял манифест файл (несмотря на то что это MainActivity), всё четно
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Помогите с ошибкой
Повторюсь. Не будет он приведен к наследнику никогда. Это основы Java так сказать. При приведении к наследнику, надо делать явное приведение типов. (Я не буду сейчас брать в расчет autoboxing в Java).поскольку R.id.button - объект Button, в данном случае во время компиляции объект View будет приведен к классу наследника
И еще раз, если вы пишете тип View объекту, то он и будет View. Это же Java и строгая типизация. Указали View, будет Вакм View и не будет никакого Button.
А, ну с этим согласен. Просто имелось ввиду наверное не onCreate, а super.onCreateв данном случае - да. Не создавать объект view до вызова метода onCreate
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 17:32
Re: Помогите с ошибкой
допускается неявное приведение типов — в случае, если значение одного типа присваивается переменной другого, то компилятор автоматически генерирует код для преобразования значения в нужный тип, если только такое преобразование не приводит к потере данныхm090050 писал(а):Повторюсь. Не будет он приведен к наследнику никогда. Это основы Java так сказать. При приведении к наследнику, надо делать явное приведение типов. (Я не буду сейчас брать в расчет autoboxing в Java).поскольку R.id.button - объект Button, в данном случае во время компиляции объект View будет приведен к классу наследника
И еще раз, если вы пишете тип View объекту, то он и будет View. Это же Java и строгая типизация. Указали View, будет Вакм View и не будет никакого Button.А, ну с этим согласен. Просто имелось ввиду наверное не onCreate, а super.onCreateв данном случае - да. Не создавать объект view до вызова метода onCreate
В данном случае значению типа View присваивается значение типа Button.(Вы правы -это основы программирования и это отличия псевдострогой типизации java от C++)
P.S. если не много отойти от темы, неявное преобразование типов java бывает разное:
1. Преобразование присваивания
2. Преобразование вызова метода
3. Преобразование приведения
4. Строковое преобразование
5. Арифметическое расширение
Все это по сути не всегда имеет значение в повседневной жизни, но открывает некоторые границы, да и наверно зависит от реализации компилятора. Опять же это преобразования контекстов, в свою очередь в каждом контексте разрешены различные преобразования:
1. Тождественное преобразование
2. Расширяющее примитивное преобразование
3. Сужающее примитивное преобразование
4. Расширяющее ссылочное преобразование
5. Сужающее ссылочное преобразование
6. Строковые преобразования
Последний раз редактировалось altwin 03 янв 2014, 15:16, всего редактировалось 2 раза.
Re: Помогите с ошибкой
Измените код, как вам говорили наandrei.zik писал(а):прошу
[syntax=java]Button btn = (Button) findViewById(R.id.button1);[/syntax]
и поместите его в метод onCreate перед выводом Log
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Помогите с ошибкой
Вы только что сами ответили на вопрос. Во-первых потеря данных на лицо (View не Button), во-вторых, строгая типизация (View не Button). И я не пойму, как это невозможно понять.допускается неявное приведение типов — в случае, если значение одного типа присваивается переменной другого, то компилятор автоматически генерирует код для преобразования значения в нужный тип, если только такое преобразование не приводит к потере данных
Покажите мне где в Java есть неявное расширяющее ссылочное преобразование, уж очень интересно. И было бы интересно узнать про строковое преобразование.1. Преобразование присваивания
2. Преобразование вызова метода
3. Преобразование приведения
4. Строковое преобразование
5. Арифметическое расширение
Все это по сути не всегда имеет значение в повседневной жизни, но открывает некоторые границы, да и наверно зависит от реализации компилятора. Опять же это преобразования контекстов, в свою очередь в каждом контексте разрешены различные преобразования:
1. Тождественное преобразование
2. Расширяющее примитивное преобразование
3. Сужающее примитивное преобразование
4. Расширяющее ссылочное преобразование
5. Сужающее ссылочное преобразование
6. Строковые преобразования
Последний раз редактировалось Mikhail_dev 03 янв 2014, 15:22, всего редактировалось 1 раз.
-
- Сообщения: 6
- Зарегистрирован: 23 сен 2013, 17:32
Re: Помогите с ошибкой
всё заработало, спасибо всем