Урок 28. Extras - передаем данные с помощью Intent

Обсуждение уроков
Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 14 окт 2013, 15:49

Ничего этого делать не нужно, это все равно что гадать на кофейной гуще. Вначале нужно перенестись в ту строку, где ошибка, и посмотреть на нее. Иначе, зачем тогда логи??
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 14 окт 2013, 16:09

Foenix Вы мне всегда интуитивно нравились :D Чес.слово - кликал. ...но видимо недостаточно уверенно - ничего не открывалось ... Но после Ваших слов открылось ... В общем там было "dbHelper.close();", которого у меня уже нет .. . Я их чистил, но этот как-то просочился ... Теперь все работает :).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 14 окт 2013, 16:31

ну магия :) да, способности есть у меня :-D

Насчет "кликал" не открылось. Кликай всегда на ту строку, где показан адрес в ТВОЕЙ программе, и ПОСЛЕ строчки Caused by .. (что значит "по причине").
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 14 окт 2013, 16:46

Похоже. Сегодня с утра я услышал Ваш голос в вебинаре, и первое на что обратил внимание, что он очень похож на тот, который представлялся, когда я читал Ваши реплики на форуме. Это не нормально :) (изв-те за оффтоп)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 14 окт 2013, 16:56

голос ужасный :( я послушала в записи только начало и не стала продолжать даже. Слышала, что у многих такое..
Спасибо большое, что посмотрел вебинар, буду рада вопросам если что. Ко мне можно на ты обращаться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 14 окт 2013, 17:04

Спасибо. Не премину :)

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 19 окт 2013, 23:31

Есть справочник, в котором имеется ссылочное поле на другие элементы этого же справочника, которые трактуются, как родительские элементы элементов, которые содержат такие ссылки. Т.е., имеется многоуровневый иерархический справочник. MainActivity обеспечивает отображение списка и безнес-логику данного справочника. Список справочника (ListView+SimpleCursorAdapter) представляет из себя линейный список, отображающий элементы одного родителя. Абсолютно идентично отображению содержания одного каталога в любом файл-менеджере. Точно также, как в ф.-менеджере должна осуществляться и навигация по уровням справочника (без привлечения treeview): дабл-клик по элементу должен "открывать" этот элемент, как каталог, и в новом списке должны отображаться его дочерние элементы.
Попытался реализовать эту функцию с помощью рекурсивного вызова MainActivity, передавая ей через интент новый ID для формирования нового курсора. Но у меня ничего не вышло. Ошибок не возникает, в дебаге проследил, что вплоть до инициации "новой" Activity ("startActivity(intent);") все переменные получают ожидаемые значения, но после завершения метода вызова Activity посредством интента (на этом этапе в дебаге происходит что-то мне совсем неведомое и я ничего не могу об этом рассказать), программа просто возвращается к следующей строке кода в MainActivity. Список на дисплее, в котором я кликал по элементу, передергивается и остается неизменным.
Я не спрашиваю, что я сделал неправильно, потому что я и не знаю, как это делать и можно ли так делать, - метод тыка не прокатил ... Не мог бы кто-н подсказать, как надо делать?
PS Забыл сказать, что в других местах, например при вызове экрана создания нового элемента, а потом при вызове списка при сохранении этого элемента, или отмены создания элемента, интенты исправно отрабатывают.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 20 окт 2013, 00:19

Как "надо" делать тут будет у каждого свой. Я бы такое делала через фрагменты, добавляя сверху созданный новый фрагмент. В общем, это продумать нужно. А вот рекурсивный вызов ( и тем более главной активити!) мне кажется сомнительным занятием..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 20 окт 2013, 01:07

Доброй ночи. Не ожидал сегодня получить ответ. В общем, во-первых, увы, я не знаю, что такое "фрагмент", во-вторых, не понимаю, что такое добавить его сверху (и зачем?). В-третьих, кажется ты не поняла, что мне надо сделать.

MainActivity у меня изначально только тем и занимается, что строит список по указанному ID родителя и обрабатывает события в этом экране. Естественно, что программа начинается с этого списка (с ID_родителя = 0). Ясно, что весь этот функционал должен быть закодирован только в одном куске (экземпляре) кода. У меня таким куском пока является MainActivity. Она же обрабатывает смену родительского ID. А после этого ничего не остается, как только сформировать новый список. Но это тоже ее функция ... То есть, нет сомнений, что самым естественным решением тут была бы рекурсия. Но вот как это реализовать технически (и тянет ли это Java) - я не знаю :( ...
Отвечать прямо сейчас не обязательно, поздно уже очень (или может ты располагаешься значительно западнее...)?).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 20 окт 2013, 09:14

Mike писал(а):Доброй ночи. Не ожидал сегодня получить ответ. В общем, во-первых, увы, я не знаю, что такое "фрагмент", во-вторых, не понимаю, что такое добавить его сверху (и зачем?). В-третьих, кажется ты не поняла, что мне надо сделать.
Я все поняла прекрасно, или ты так объясняешь. Ответ звучит не очень - "не знаю что такое фрагменты и знать не хочу". А ты посмотри, урок по фрагментам имеется. При их использовании будет создан 1 экземпляр MainActivity, как ты, вроде бы, этого и хотел, а не плодиться неизвестно сколько рекурсивно вызванных активити. Даже не представляю как это. Ты уже не первый тут с горячим желанием организовать непременно рекурсию :-D у меня прям дежавю.
Кстати, "дабл-клик" это тоже для андроида не совсем верно :o
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 20 окт 2013, 19:23

Не в том дело, что "... и знать не хочу". Просто слово "фрагмент" я до сих пор воспринимал сугубо как "часть чего-то", а дальше 54-го (кажется) урока, еще не заглядывал и не знал, что и к этому Гугл приложил свою руку. Но теперь заглянул. Окончательные выводы делать рано, но первое впечатление, - очередной костыль типа "setBackground() есть, а getBackground() - нету"(?!). (До версии Android 1.5 (кажется) достать его (бэкграунд) можно было только через "Владивосток", а после, - только через "Хабаровск", но просто по человечески getBackground() как не было так и нет ...)).
Но самое главное, что моя основная версия пока - 2.3.3 ( у меня телефон такой), а Fragment, как я понял, работает только с 3.0 ((( ..., - т.е., не катит (и я не виноват!) ... Но ведь жили как-то без этого ...

Я все еще надеюсь, что мой интент не сработал не по причине какого-то принципиального технического препятствия, а в результате банальной программистской ошибки/недочета, связанных с крайней убогостью моей квалификации. На этот случай выкладываю фрагмент кода в котором вызывается метод newLayer(id), из которого вызывается интент и описание метода. Такого рода ошибки опознаются профи с одного взгляда:

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

public class MainActivity extends Activity implements OnClickListener {
     .........
     protected void onCreate(Bundle savedInstanceState) {
           .........
	//Формирую список по входящим параметрам
	// получаю из Intent текущее МХ и объект
	Intent intent = getIntent();
	if (intent.hasExtra("selectedItemId") != false){
		intCurStorPlaceId = intent.getIntExtra("intCurStorPlaceId", 0);
		int selectedItemId = intent.getIntExtra("selectedItemId", 0);
		fullPathStorPlace = intent.getStringExtra("fullPathStorPlace");	
	} else {
		fullPathStorPlace = "Начальные Места хранения";
	}

        ..........

        lvMain.setOnItemClickListener(new OnItemClickListener(){
                public void onItemClick(AdapterView<?> parent, View view,
		        int position, long id) {
				if (viewOld != null) {

					viewOld.setBackgroundColor(intBackgroundColor);
					Log.d(LOG_TAG, "viewOld: position = " + position + ", id = "
						       + id);
					if (viewOldPosition == position) {
						//т.е., дабл-клик
						newLayer(id);
					}
				};
					
				view.setBackgroundColor(Color.LTGRAY);				
				Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
				    + id);
				viewOld = view;	
				viewOldPosition = position;
			}
                 }
           )
     }

     public void newLayer(long idCurItem) {
       
	//вычисляются переменные	для подстановки в интент
        .................
        
-- Я додумался и безрезультатно пытался здесь заранее создать какой-то новый экземпляр MainActivity, но не рискну показывать, как я это делал (потому как без понятия, как это делается, а аналогов не нашел ...). Но обращаю внимание, что это как-то перекликается с твоим советом использовать фрагменты, хотя я тогда о них ничего не знал! Так может быть в этом и дело - просто грамотно создать этот экземпляр и подставить его вместо "MainActivity.class"? Вдруг получится :)? А если получится, то потом можно будет подумать и о том, как убить предыдущую, если она сама не захочет уйти. Напиши мне, плз, эту строчечку, и я попробую. (как программист удовлетворительно знаю только два метода: 1. copy-paste и 2. метод "тыка" (((, - но я не программист и не претендую ...): 

	Intent intent = new Intent(this, MainActivity.class);
	intent.putExtra("intCurStorPlaceId", intCurStorPlaceId);
	intent.putExtra("fullPathStorPlace", fullPathStorPlace);
	intent.putExtra("key", "wClick");
	Log.d(LOG_TAG, "M1 intent");      //до этого места все тип-топ
	startActivity(intent);		
     };
}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 20 окт 2013, 20:05

support library есть, поэтому юзаются везде. А выводы ты про них рано сделал)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 20 окт 2013, 20:11

как убить предыдущую, если она сама не захочет уйти.
вот те строчки что там написаны, целый абзац, это просто ай-ай-ай и безобразие..
люди, ну скажите же, что тут нужны фрагменты.. это ведь как раз тот самый случай..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mike
Сообщения: 12
Зарегистрирован: 27 авг 2013, 18:28

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Mike » 21 окт 2013, 13:07

ладно-ладно, пойду разбираться с фрагментами. Но хочу заметить, что при смене ориентации MainActivity спокойно перегружается и это никого не приводит в ужас ... Несправедливо...

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Nik » 09 ноя 2013, 20:12

Люди помогите. не могу вкурить почему приложение останавливается... пытаюсь передать число из одной активити в другую.

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

x = x + 1;
			Intent intent = new Intent(this, Result.class);
			intent.putExtra("x", x);
			startActivity(intent);
принимаю вот

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

Intent intent = getIntent();
	    
	    int x = intent.getIntExtra("x", 0);
		tv = (EditText)findViewById(R.id.tv);
		tv.setText(x);
почему приложение останавливается и х не передается?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 09 ноя 2013, 22:47

экстрасенсов тут нету. Ты лог смотрел?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Nik » 10 ноя 2013, 09:04

Foenix писал(а):экстрасенсов тут нету. Ты лог смотрел?
ну пока этой строчки не было все работает. может быть я не правильно передаю значение переменной? объясните как правильно передать переменную из активити main в активити resultat.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 10 ноя 2013, 09:19

в логе все написано.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Nik » 10 ноя 2013, 10:31

Foenix писал(а):в логе все написано.
не знаю как правильно прикреплять лог ... https://drive.google.com/file/d/0BxZRVO ... sp=sharing вот он на ссылке будет, можно?
PS научите прикреплять логи)


сам код такой

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

public class MainActivity extends Activity implements OnClickListener {
int x = 0;
	Button btn1;
	Button btn2;
	Button btn3;
	Button btn4;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		btn1 = (Button) findViewById(R.id.btn1);
		btn2 = (Button) findViewById(R.id.btn2);
		btn3 = (Button) findViewById(R.id.btn3);
		btn4 = (Button) findViewById(R.id.btn4);
		
		
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
		btn3.setOnClickListener(this);
		btn4.setOnClickListener(this);
		
	}
	
	
	
	public void onClick(View v) {
		
		switch (v.getId()){
		case R.id.btn1:
			Toast.makeText(this, "Верно", Toast.LENGTH_LONG).show();
			x = x + 1;
			Intent intent = new Intent(this, Result.class);
			intent.putExtra("x", x);
			startActivity(intent);
			break;
		case R.id.btn2:
			Toast.makeText(this, "Не Верно", Toast.LENGTH_LONG).show();
			Intent intent1 = new Intent(this, Two.class);
			startActivity(intent1);
			break;
		case R.id.btn3:
			Toast.makeText(this, "Не Верно", Toast.LENGTH_LONG).show();
			Intent intent2 = new Intent(this, Two.class);
			startActivity(intent2);
			break;
		case R.id.btn4:
			Toast.makeText(this, "Не Верно", Toast.LENGTH_LONG).show();
			Intent intent3 = new Intent(this, Two.class);
			startActivity(intent3);
			break;
			
		
		};
	};
а куда передаем там вот так

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

public class Result extends Activity {
EditText tv;
int x;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_result);
		Intent intent = getIntent();
	    
	    int x = intent.getIntExtra("x", 0);
		tv = (EditText)findViewById(R.id.tv);
		tv.setText(x);
		
	}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 28. Extras - передаем данные с помощью Intent

Сообщение Foenix » 10 ноя 2013, 12:52

Выделяешь как обычно ВСЕ КРАСНЫЕ СТРОЧКИ в логе, дальше ctrl+C, и тут ctrl+V

а то просишь лог, вначале не понимают, потом наконец-то вставляют сюда 1 какую-нибудь строчку, потом три, потом только целиком!
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить