почему у меня появляется NullPointerException

Ответить
Turalllb
Сообщения: 40
Зарегистрирован: 08 окт 2015, 17:48

почему у меня появляется NullPointerException

Сообщение Turalllb » 13 апр 2016, 22:13

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

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 и чтобы этого не происходило надо правильно через интент вызвать этот метод?
Последний раз редактировалось Turalllb 17 апр 2016, 14:14, всего редактировалось 1 раз.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: почему у меня появляется NullPointerException

Сообщение klblk » 14 апр 2016, 05:18

[syntax=java5]MainActivity TTT = new MainActivity();
TTT.yyy();[/syntax]

так делать нельзя
смотрите уроки 28 и 29

Turalllb
Сообщения: 40
Зарегистрирован: 08 окт 2015, 17:48

Re: почему у меня появляется NullPointerException

Сообщение Turalllb » 14 апр 2016, 21:59

ну это прокатит , если у меня два активити и если второе закрывается возвращая нас в 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 это связано ?
Последний раз редактировалось Turalllb 17 апр 2016, 14:15, всего редактировалось 2 раза.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: почему у меня появляется NullPointerException

Сообщение klblk » 15 апр 2016, 11:40

Научитесь оформлять код на форуме!
Я должен был сразу догадаться в тексте про два активити, что вы имеете ввиду сервис?
Висящая над всеми приложениями кнопка не самый хороший кейс.
Можете при клике на кнопку делать startActivity(). У самой активити прописать параметр "singleTop" (или "singleTask"). Если активити уже запущена, то вместо метода onCreate() сработает onNewIntent(). В Intent вы может передать любые данные.

Нельзя создавать экземпляр класса Activity вручную. Просто примите как должное.

Turalllb
Сообщения: 40
Зарегистрирован: 08 окт 2015, 17:48

Re: почему у меня появляется NullPointerException

Сообщение Turalllb » 15 апр 2016, 14:01

Хорошо, учту что вы сказали, буду дома попробую сделать по нажатию кнопки startActivity. А чем плоха висящая над всем кнопка? Вы про минусы и неудобство для пользователя или какие то другие минусы?

Разобрался я поверхностно с тасками, атрибутом launchMode и работой интент. через синглтоп смог сделать , что хотел, спасибо. Только не совсем понял один момент. В уроке написано что в манифесте активити на которое хочу перейти надо поставить атрибут сингтоп и в интент тоже ставить флаг синглтоп, но тогда выходит ошибка Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. с флагом New_Task всё работает и визуально не видно, что открывается новый экземпляр активити , значит всё таки работает именно атрибут синглтоп.

Ответить