Урок 29. Вызываем Activity и получаем результат. Метод startActivityForResult

Обсуждение уроков
Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение rezak90 » 08 янв 2013, 22:49

так тогда ни колбек ни ивент не помогут))) если другое приложение, да достаточно того что контексты разные, так что здесь никак кроме как использования "транспорта" через файл. Даже рекомендую написать один объект в одном и втором приложение (одинаковый) и делать сериализацию-десериализацию в файл.
R.id.team
Политика на форуме запрещена

Shecspi
Сообщения: 1
Зарегистрирован: 28 сен 2013, 21:59

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Shecspi » 28 сен 2013, 22:11

Здравствуйте. Пишу программу, суть которой в том, чтобы при запуске выбрать контакт из телефонной книги и проводить в дальнейшем с ним манипуляции. Исходный код:

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

public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT);
		pickIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
		startActivityForResult(pickIntent, 1);
	}
	
	protected void OnActivityResult(int requestCode, int resultCode, Intent data)
	{
		Uri contact = data.getData();
		Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
	}
}
Но по каким-то причинам после выбора контакта ничего не происходит.Метод OnActivityResult вообще не вызывается. Вроде бы делаю всё, как в уроке, только вместо своего Activity вызываю системный. Не подскажете, как это починить?

ruan65
Сообщения: 1
Зарегистрирован: 18 янв 2014, 23:54

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение ruan65 » 11 мар 2014, 17:05

Мне кажется не к чему создавать новый Intent во втором активити, ведь он уже есть (он открыл это активити) и его можно взять и положить туда строку.

setResult(RESULT_OK, getIntent().putExtra("name", etl.getText().toString()));

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение elron » 01 май 2014, 10:52

Подскажите пожалуйста, как можно реализовать передачу данных между разными приложениями ?
Например, когда приложение1.Активити1 выполняет startActivity() (с передачей данных) и открывается другое приложение2.Активити2. После закрытия приложение2.Активити2 другие данные передаются в приложение1.Активити1. Предполагаю что нужно использовать BroadcastReceiver и Service.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение KamiSempai » 01 май 2014, 21:23

elron писал(а):Подскажите пожалуйста, как можно реализовать передачу данных между разными приложениями ?
Например, когда приложение1.Активити1 выполняет startActivity() (с передачей данных) и открывается другое приложение2.Активити2. После закрытия приложение2.Активити2 другие данные передаются в приложение1.Активити1. Предполагаю что нужно использовать BroadcastReceiver и Service.
Много зависит от передаваемых данных.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение elron » 01 май 2014, 22:17

KamiSempai писал(а):
elron писал(а):Подскажите пожалуйста, как можно реализовать передачу данных между разными приложениями ?
Например, когда приложение1.Активити1 выполняет startActivity() (с передачей данных) и открывается другое приложение2.Активити2. После закрытия приложение2.Активити2 другие данные передаются в приложение1.Активити1. Предполагаю что нужно использовать BroadcastReceiver и Service.
Много зависит от передаваемых данных.
Данные типа int и String.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение KamiSempai » 02 май 2014, 10:33

Можно через setResult(int resultCode, Intent data).
Вызванная активити вызывает этот метод и передает Intent с Extras которые содержат нужные данные.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Johanspb
Сообщения: 2
Зарегистрирован: 01 авг 2014, 17:06

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Johanspb » 07 авг 2014, 13:26

Тоже не совсем понял смысл создания нового объекта Intent во втором активити, если можно положить данные в пришедший интент из первого:
вместо Intent intent = new Intent();
написать Intent intent = getIntent();

При варианте создания нового Intent-а есть какие-то дополнительные возможности? В чем разница?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение KamiSempai » 07 авг 2014, 16:33

Johanspb писал(а):Тоже не совсем понял смысл создания нового объекта Intent во втором активити, если можно положить данные в пришедший интент из первого:
вместо Intent intent = new Intent();
написать Intent intent = getIntent();

При варианте создания нового Intent-а есть какие-то дополнительные возможности? В чем разница?
getIntent() возвращает интент который использовался для запуска активити. Он может быть заполнен любыми данными, о которых вы можете и не подозревать, что бы исключить возможность передачи данных, которые вы не собирались передавать, лучше использовать новый "чистый" Intent.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Trelp
Сообщения: 1
Зарегистрирован: 13 дек 2012, 14:32

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Trelp » 06 сен 2014, 13:30

Здравствуйте!
При генерации метода onActivityResult Eclipse выдает следующее

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

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
	}
В коде урока отсутствует строка 4.
Собственно почему мы не вызываем конструктор суперкласса?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение altwin » 06 сен 2014, 14:42

Trelp писал(а):Здравствуйте!
При генерации метода onActivityResult Eclipse выдает следующее

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

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
	}
В коде урока отсутствует строка 4.
Собственно почему мы не вызываем конструктор суперкласса?
создайте issue.
Изображение

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

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Foenix » 06 сен 2014, 16:14

:lol:
R.id.team

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

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение KamiSempai » 06 сен 2014, 16:42

Trelp писал(а):Здравствуйте!
При генерации метода onActivityResult Eclipse выдает следующее

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

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
	}
В коде урока отсутствует строка 4.
Собственно почему мы не вызываем конструктор суперкласса?
Это не конструктор а метод. Его можно и не вызывать если нет необходимости как в данном случае (так как он ничего не делает) или в случае если мы хотим полностью поменять принцип работы метода.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение elron » 06 сен 2014, 17:25

Маленькая заметка: код лучше писать до "super.onActivityResult(requestCode, resultCode, data);" или после ?!

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Mikhail_dev » 09 сен 2014, 17:00

Не заметка, а вопрос =)
Надо понимать что это вообще за страшное слово "super" и почему его вызывают, тогда и вопрос отпадет. А если искать не хочется, то юзайте после. В 90 процентах случаев, это будет работать, в 10 нет.

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Sky-VIN » 09 сен 2014, 23:33

Не могу переслать int.

В MainActivity:
int age = data.getIntExtra("age", 0);

В отправном Activity:
intent.putExtra("age", Integer.ValueOf(etAge.getText().toString()));
Завтра будет.
Лучше.

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

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение klblk » 10 сен 2014, 07:11

Sky-VIN писал(а):Не могу переслать int.

В MainActivity:
int age = data.getIntExtra("age", 0);

В отправном Activity:
intent.putExtra("age", Integer.ValueOf(etAge.getText().toString()));
попробуйте вместо ValueOf использовать parseInt

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Sky-VIN » 10 сен 2014, 09:56

klblk писал(а):попробуйте вместо ValueOf использовать parseInt
Не помогло.
Пишу
intent.putExtra("age", Integer.parseInt(etAge.getText().toString()));

Error: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {d.swan/d.swan.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x2693

И еще: подскажите как реализовать возврат к MainActivity без вылета, при нажатии кнопки "назад".
Завтра будет.
Лучше.

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение elron » 10 сен 2014, 10:57

Sky-VIN писал(а):
klblk писал(а):попробуйте вместо ValueOf использовать parseInt
Не помогло.
Пишу
intent.putExtra("age", Integer.parseInt(etAge.getText().toString()));

Error: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {d.swan/d.swan.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x2693

И еще: подскажите как реализовать возврат к MainActivity без вылета, при нажатии кнопки "назад".
Во втором активити при нажатии на кнопку должно быть примерно так:
[syntax=java]Intent intent = new Intent();
intent.putExtra("age", 11);
setResult(Activity.RESULT_OK, intent); // или Activity.RESULT_CANCELED
finish(); // нужно, если своя кнопка(button)[/syntax]
В первом:
[syntax=java]@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// лучше ещё добаваить проверку resultCode на Activity.RESULT_CANCELED или Activity.RESULT_OK
if (data == null) {return;}
//requestCode используется, чтобы отличать друг от друга пришедшие результаты
if (requestCode == 9) {
int name = data.getIntExtra("age", -1);
// ..
}
}[/syntax]

Аватара пользователя
Sky-VIN
Сообщения: 21
Зарегистрирован: 06 сен 2014, 00:05
Откуда: UA
Контактная информация:

Re: Урок 29. Вызываем Activity и получаем результат. Метод s

Сообщение Sky-VIN » 10 сен 2014, 12:43

Дико извеняюсь!!!
Мой косяк. в TextView.setText не прописал преобразование из int в String.

Все работает. Спасибо!!!
Завтра будет.
Лучше.

Ответить