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

Обсуждение уроков
xfn
Сообщения: 10
Зарегистрирован: 23 июл 2015, 14:54

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

Сообщение xfn » 03 авг 2015, 17:37

Добрый день!

Создаю в первом активити:
ArrayList<String> answerList = new ArrayList<String>();

заполняю здесь же:
answerList.add(tek);

передаю в другое(-ой, -ую) активити:
if (v.getId()==R.id.btnegal){
Intent intent = new Intent(this, ActivityTwo.class);
startActivity(intent);
}

В другом активити:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// находим список
lvMain = (ListView) findViewById(R.id.lvMain);
Intent intent = getIntent();
ArrayList <String> answerListView = intent. ???;

// создаем адаптер
ArrayAdapter<String> myadapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, answerListView);
// присваиваем адаптер списку
lvMain.setAdapter(myadapter);

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

xfn
Сообщения: 10
Зарегистрирован: 23 июл 2015, 14:54

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

Сообщение xfn » 10 авг 2015, 12:14

Так как у меня не получилось и ответов нет, решил упростить задачу.

В создаю класс:

public class mConstList {
public static String [] arr = new String [10];
}

В mainactivity его заполняю и передаю в другое activity:

mList++;
mConstList.arr[mList]=Double.toString(result);

Intent intent = new Intent(this, ActivityTwo.class);
startActivity(intent);

Во втором активити пытаюсь вывести в виде списка:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// находим список
lvMain = (ListView) findViewById(R.id.lvMain);
//Intent intent = getIntent().getExtras();
//Bundle b=getIntent().getExtras();
//Bundle b = new Bundle();
//ArrayList <String> answerListView = b.getStringArrayList("answerList");

// создаем адаптер

ArrayAdapter<String> myadapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mConstList.arr);
// присваиваем адаптер списку
lvMain.setAdapter(myadapter);


При вызове этого второго активити программа вываливается. Если создать массив в этом активити, то все работает. В чем дело? Классы нельзя так просто передавать?

xfn
Сообщения: 10
Зарегистрирован: 23 июл 2015, 14:54

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

Сообщение xfn » 10 авг 2015, 12:56

Спасибо, проблема решена, нашел ошибку.

ColKurtz
Сообщения: 1
Зарегистрирован: 03 сен 2015, 14:23

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

Сообщение ColKurtz » 03 сен 2015, 14:28

При нажатии на поле EditText в эмуляторе (AS 1.3.1, Android 5.1) не открывается клавиатура и не происходит считывание текста, в чем может быть проблема?

AndreiMaxx
Сообщения: 9
Зарегистрирован: 15 окт 2015, 15:14

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

Сообщение AndreiMaxx » 23 окт 2015, 16:08

Здравствуйте, сразу хочу извениться, если вопрос не самый умный, я новичок и хотел узнать мнение профи. Скажите, чем может грозить вместо putExtra передавать значения через Intent, тупо записать значение в SharedPreference и потом вытащить их в другом Activity. Я знаю, что это сработает, но все же где подвох ? Спасибо если кто то сможет объяснить разницу.

Андрей Валентинович
Сообщения: 13
Зарегистрирован: 24 янв 2014, 02:45

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

Сообщение Андрей Валентинович » 30 окт 2015, 22:50

А как передать данные два раза? И чтоб одни не заменили другие. Пример. Выводим имя и фамилию, вася Петров, это добавилось потом еще раз через это же активити иван Иванов и это добавилось ниже.

elaman16
Сообщения: 2
Зарегистрирован: 06 дек 2015, 09:08

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

Сообщение elaman16 » 10 дек 2015, 07:39

Второе Activity вместо введенных данных выдает NULL. Код просмотрел 10 раз. Ошибок нет. В чем может быть проблема?

GRAF_COLLIOSTRO
Сообщения: 115
Зарегистрирован: 08 янв 2015, 14:32

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

Сообщение GRAF_COLLIOSTRO » 10 дек 2015, 09:17

Здравствуйте, сразу хочу извениться, если вопрос не самый умный, я новичок и хотел узнать мнение профи. Скажите, чем может грозить вместо putExtra передавать значения через Intent, тупо записать значение в SharedPreference и потом вытащить их в другом Activity. Я знаю, что это сработает, но все же где подвох ? Спасибо если кто то сможет объяснить разницу.
данные можно передавать как угодно. можно вообще сохранять в файл и потом читать из него. тут больше вопрос эстетики и целесообразности.

Ради передачи одной несчастной переменной дёргать SharedPreference не комильфо. - putExtra рулит)

в SharedPreference, например, удобно хранить ник пользователя, его накопленые очки/бонусы и тп... такие глобальные переменные, которые используются во всём приложении.

но иногда данных слишком много - тут уже на помощь БД. и файлы промежуточные пожалуйста.

а про ПОДВОХ с SharedPreference - может случиться такая весчь: например вы используете несколько потоков. каждый поток пишет в SharedPreference и читает из него. всё какбы ничего, но может случиться так, что один поток пишет и ещё не дописал. а другой поток уже лезет получать данные.

Ну а вообще, про классический вариант передачи данных в JAVA - создайте Public класс с переменными. пропишите туда методы GET и SET. Когда разберёте этот механизм, сразу станет всё понятно.

RommzesDT
Сообщения: 1
Зарегистрирован: 28 янв 2016, 07:30

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

Сообщение RommzesDT » 28 янв 2016, 07:48

Здравствуйте!
начну попорядку -
в первой mapactivity онкликлистенер вызывает другую активити

public void levelmap_1_start (View v){//кнопка level 1
Intent intent = new Intent(MapActivity.this, MainActivity.class);
intent.putExtra(MainActivity.LEVEL_ID1, "1");
startActivity(intent);
}

в mainactivity запускается следущяя

game = new Game(this.getApplicationContext(), screen, 30);

после Game еще одна LoadScene но уже с указанием номера сцены

scene = new com.test.game.LoadScene(this, 1);

и в следующей

int id;

public LoadScene(Game game, int id) {
super(game);
this.id = id;
}


как мне передать параметр ID для все этих активити?
или хотябы в LoadScene был доступен ID передаваемый с кнопки. чтобы подставить его вместо 1
scene = new com.test.game.LoadScene(this, 1);
голову сломал блин... новичок еще ...

t0psecret
Сообщения: 7
Зарегистрирован: 27 янв 2016, 14:16

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

Сообщение t0psecret » 06 фев 2016, 21:33

Всем привет.
Объясните, пожалуйста.
В чём отличие двух вариантов кода

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

intent.putExtra("fname", etFName.getText().ToString);
intent.putExtra("lname", etLName.getText().ToString);

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

intent.putExtra("fname", etFName.getText());
intent.putExtra("lname", etLName.getText());
В чём отличие так то я понимаю. Метод getText() возвращает объект класса Editable, а требуется параметр типа String. Вроде бы должно срабатывать автоматическое приведение типов, и у Editable должен так и так вызываться метод ToString(). И вроде бы всё так и происходит. В дебагинге, если смотреть содержимое переменной intent в поле mExtra, затем в mMap хранятся две введённых мной строки, но при getIntent() во втором активити эти поля уже пустые и соответственно на экране null, null.
Сравнивал содержимое intent.mExtras.mMap для обоих вариантов кода, на мой взгляд оно идентично, но работает только вариант с явным вызовом ToString().

dagreyv
Сообщения: 1
Зарегистрирован: 05 июл 2016, 14:03

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

Сообщение dagreyv » 05 июл 2016, 14:24

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

ЗЫ предпологаю, что делается совсем просто, но у меня это вызвало затруднение

Глеб
Сообщения: 1
Зарегистрирован: 08 сен 2016, 10:18

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

Сообщение Глеб » 08 сен 2016, 10:23

Привет всем!
Скажите, а как передать в другую активность уже инициализированную числовую переменную (например Int)?

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

Intent AddItemIntent = new Intent(MainActivity.this, AddItem.class);
        AddItemIntent.putExtra("AddItemAction", AddItemAction);
        startActivity(AddItemIntent);
Попробовал так (AddItemAction - инициализированная ранее переменная int) - пишет, что переменная не должна быть инициализирована.

WKBAPKA
Сообщения: 32
Зарегистрирован: 03 янв 2014, 14:28

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

Сообщение WKBAPKA » 26 авг 2017, 13:17

chuikoff писал(а):
Сейчас, например, пишу приложение и все такие static final переменные храню просто в отдельном классе Common.
А как потом подключаете этот класс и используете его переменные, расскажите пожалуйста с примером кода.
если мы говорим про статические переменные и методы помеченные как public
Common.MY_VARIABLE

Chingar
Сообщения: 1
Зарегистрирован: 03 ноя 2017, 00:59

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

Сообщение Chingar » 03 ноя 2017, 01:05

Извините за приступ кретинизма. Но второй день мучаюсь. Выдает ноль и хоть ты тресни.
Блок передачи

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

 public void ClickStart(View view) {

        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("fest_dig", fest_text.getText().toString());
        intent.putExtra("sec_dig", sec_text.getText().toString());
        startActivity(intent);
    }
Блок приема

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

 Intent intent = getIntent();
    String fest = intent.getStringExtra("fest_dig");
    String sec = intent.getStringExtra("sec_dig");
Приложение крашется с ошибкой

rocess: com.example.android.trener_math, PID: 5272
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.trener_math/com.example.android.trener_math.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference

Andrey0707
Сообщения: 1
Зарегистрирован: 13 авг 2018, 09:28

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

Сообщение Andrey0707 » 13 авг 2018, 09:30

А можно редактировать manifest из кода? В частности Intetn-filter. К примеру временно заблокировать его? Или проверять на то, что приложение уже запущено?

Ответить