Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 ноя 2018, 19:20

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 13 апр 2016, 22:13 

Зарегистрирован: 08 окт 2015, 17:48
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Код: [ Загрузить ] [ Скрыть ]
  1. public class MainActivity extends ActionBarActivity implements View.OnClickListener { 
  2.      
  3.     public TextView tvOut; 
  4.  
  5.  
  6.     @Override 
  7.     protected void onCreate(Bundle savedInstanceState) { 
  8.         super.onCreate(savedInstanceState); 
  9.         setContentView(R.layout.activity_main); 
  10.         //если вызов метода yyy() сделан тут то все работает 
  11.         yyy(); 
  12.     } 
  13.  
  14.      public void yyy(){ 
  15.          tvOut = (TextView) findViewById(R.id.tvOut); 
  16.          tvOut.setText("rty"); 
  17.      } 
  18.  
  19.  
  20. У меня есть в этом классе кнопка выполняющая запуск второго класса , в котором я пытаюсь обратиться к методу yyy() 
  21.  
  22. public class two extends Activity  { 
  23.  
  24.  
  25.  
  26.     protected void onCreate(Bundle savedInstanceState) { 
  27.         super.onCreate(savedInstanceState); 
  28.         setContentView(R.layout.two); 
  29.         MainActivity TTT = new MainActivity(); 
  30.         TTT.yyy(); 
  31.     } 


но получаю 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 раз.

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 апр 2016, 05:18 
Аватар пользователя

Зарегистрирован: 18 окт 2012, 11:17
Сообщений: 1098
Откуда: г. Красноярск
Благодарил (а): 26 раз.
Поблагодарили: 279 раз.
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. MainActivity TTT = new MainActivity();
  2. TTT.yyy();


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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 апр 2016, 21:59 

Зарегистрирован: 08 окт 2015, 17:48
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
ну это прокатит , если у меня два активити и если второе закрывается возвращая нас в onActivityResult , а если у меня второе не активи , а сервис ? и сервис который не должен закрываться ?
Код: [ Загрузить ] [ Скрыть ]
  1. public class MainActivity extends ActionBarActivity implements View.OnClickListener { 
  2. public TextView tvOut; 
  3.  
  4. @Override 
  5. protected void onCreate(Bundle savedInstanceState) { 
  6.         super.onCreate(savedInstanceState); 
  7.         setContentView(R.layout.activity_main); 
  8. tvOut = (TextView) findViewById(R.id.tvOut); 
  9.  
  10.  
  11. private void showFloatingView() { 
  12.         startService(new Intent(getApplicationContext(), FloatingViewService.class)); 
  13.     } 
  14.  
  15.     private void hideFloatingView() { 
  16.         stopService(new Intent(getApplicationContext(), FloatingViewService.class)); 
  17.     } 



и по нажатию кнопки у меня запускается
FloatingViewService.class

в итоге у меня кнопка над моим первым активити , кнопка висит и одновременно я могу использовать активити , набирать в него с клавиатуры текст и вообще закрыть приложение и использовать любое другое приложение и моя кнопка будет висеть. вот я и хочу по нажатию на эту кнопку вернуться в первое активи и вставить в текстое поле нужное.
startActivityForResult есть, startServiceForResult нету, ну это и логично потому что сервис не должен закрываться.
интент как я пока понимаю тут никак не поможет , как мне подсказали нужно использовать Interface. Что подскажете ?


и еще . кто разбирается в тонкостях java и андроид , может объяснить почему нельзя делать так как я делал в первом сообщении моем. сборщик мусора работает или какая то другая причина? с какими особенностями андроид или java это связано ?


Последний раз редактировалось Turalllb 17 апр 2016, 14:15, всего редактировалось 2 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 апр 2016, 11:40 
Аватар пользователя

Зарегистрирован: 18 окт 2012, 11:17
Сообщений: 1098
Откуда: г. Красноярск
Благодарил (а): 26 раз.
Поблагодарили: 279 раз.
Научитесь оформлять код на форуме!
Я должен был сразу догадаться в тексте про два активити, что вы имеете ввиду сервис?
Висящая над всеми приложениями кнопка не самый хороший кейс.
Можете при клике на кнопку делать startActivity(). У самой активити прописать параметр "singleTop" (или "singleTask"). Если активити уже запущена, то вместо метода onCreate() сработает onNewIntent(). В Intent вы может передать любые данные.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 апр 2016, 14:01 

Зарегистрирован: 08 окт 2015, 17:48
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Хорошо, учту что вы сказали, буду дома попробую сделать по нажатию кнопки startActivity. А чем плоха висящая над всем кнопка? Вы про минусы и неудобство для пользователя или какие то другие минусы?

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


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB