Страница 1 из 1
почему у меня появляется NullPointerException
Добавлено: 13 апр 2016, 22:13
Turalllb
Код: Выделить всё
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
public TextView tvOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//если вызов метода yyy() сделан тут то все работает
yyy();
}
public void yyy(){
tvOut = (TextView) findViewById(R.id.tvOut);
tvOut.setText("rty");
}
У меня есть в этом классе кнопка выполняющая запуск второго класса , в котором я пытаюсь обратиться к методу yyy()
public class two extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.two);
MainActivity TTT = new MainActivity();
TTT.yyy();
}
}
но получаю Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
мое предположение : сперва выполняется первый класс и после выполнения некий таинственный для меня сборщик мусора очищает что-то и по запуску второго класса , он уже не может обратиться к объекту в методе первого класса.
И вопрос не совсем в тему ,если не тяжело не могли бы написать как мне передать текст в мой TextView из другого класса используя Interface . Читал про интерфейсы вроде может и правильно написал, но из-за NullPointerException не представляется возможным проверить то , что я написал.
или может когда я со второго класса запускаю этот метод у меня активен другой loyaut и чтобы этого не происходило надо правильно через интент вызвать этот метод?
Re: почему у меня появляется NullPointerException
Добавлено: 14 апр 2016, 05:18
klblk
[syntax=java5]MainActivity TTT = new MainActivity();
TTT.yyy();[/syntax]
так делать нельзя
смотрите уроки 28 и 29
Re: почему у меня появляется NullPointerException
Добавлено: 14 апр 2016, 21:59
Turalllb
ну это прокатит , если у меня два активити и если второе закрывается возвращая нас в onActivityResult , а если у меня второе не активи , а сервис ? и сервис который не должен закрываться ?
Код: Выделить всё
public class MainActivity extends ActionBarActivity implements View.OnClickListener {
public TextView tvOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvOut = (TextView) findViewById(R.id.tvOut);
}
private void showFloatingView() {
startService(new Intent(getApplicationContext(), FloatingViewService.class));
}
private void hideFloatingView() {
stopService(new Intent(getApplicationContext(), FloatingViewService.class));
}
}
и по нажатию кнопки у меня запускается
FloatingViewService.class
в итоге у меня кнопка над моим первым активити , кнопка висит и одновременно я могу использовать активити , набирать в него с клавиатуры текст и вообще закрыть приложение и использовать любое другое приложение и моя кнопка будет висеть. вот я и хочу по нажатию на эту кнопку вернуться в первое активи и вставить в текстое поле нужное.
startActivityForResult есть, startServiceForResult нету, ну это и логично потому что сервис не должен закрываться.
интент как я пока понимаю тут никак не поможет , как мне подсказали нужно использовать Interface. Что подскажете ?
и еще . кто разбирается в тонкостях java и андроид , может объяснить почему нельзя делать так как я делал в первом сообщении моем. сборщик мусора работает или какая то другая причина? с какими особенностями андроид или java это связано ?
Re: почему у меня появляется NullPointerException
Добавлено: 15 апр 2016, 11:40
klblk
Научитесь оформлять код на форуме!
Я должен был сразу догадаться в тексте про два активити, что вы имеете ввиду сервис?
Висящая над всеми приложениями кнопка не самый хороший кейс.
Можете при клике на кнопку делать startActivity(). У самой активити прописать параметр "singleTop" (или "singleTask"). Если активити уже запущена, то вместо метода onCreate() сработает onNewIntent(). В Intent вы может передать любые данные.
Нельзя создавать экземпляр класса Activity вручную. Просто примите как должное.
Re: почему у меня появляется NullPointerException
Добавлено: 15 апр 2016, 14:01
Turalllb
Хорошо, учту что вы сказали, буду дома попробую сделать по нажатию кнопки startActivity. А чем плоха висящая над всем кнопка? Вы про минусы и неудобство для пользователя или какие то другие минусы?
Разобрался я поверхностно с тасками, атрибутом launchMode и работой интент. через синглтоп смог сделать , что хотел, спасибо. Только не совсем понял один момент. В уроке написано что в манифесте активити на которое хочу перейти надо поставить атрибут сингтоп и в интент тоже ставить флаг синглтоп, но тогда выходит ошибка Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. с флагом New_Task всё работает и визуально не видно, что открывается новый экземпляр активити , значит всё таки работает именно атрибут синглтоп.