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

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

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

Сообщение rezak90 » 18 июл 2012, 11:09

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

Artemko
Сообщения: 26
Зарегистрирован: 16 июл 2012, 15:09

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

Сообщение Artemko » 18 июл 2012, 14:43

я передаю данные:

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

intent.putExtra("ImageResource", R.drawable.image);
потом хочу установить эту картинку на кнопку, но не знаю как правильно это сделать

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

Intent intent = getIntent();
String img = intent.getStringExtra("ImageResource");
ImageButton btn = (ImageButton)findViewById(R.id.btn);
 btn.setImageDrawable(img);

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

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

Сообщение KamiSempai » 18 июл 2012, 16:59

Artemko, Вы передаете в intent не картинку а id этой картинки.
id имеет тип int, следовательно, значение нужно извлекать по другому.

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

int imgId = intent.getIntegerExtra("ImageResource");
Картинку тоже нужно ставить по другому.

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

btn.setImageResource(imgId);
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

AlexandrNikulin
Сообщения: 1
Зарегистрирован: 27 июл 2012, 11:17

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

Сообщение AlexandrNikulin » 27 июл 2012, 11:20

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

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

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

Сообщение rezak90 » 27 июл 2012, 11:31

AlexandrNikulin писал(а):Подскажите, пожалуйста, как передать значение не примитивов данных (массивов примитивов), а своего написанного класса.
урок 69 тебе в помощ
R.id.team
Политика на форуме запрещена

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

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

Сообщение Finch » 27 июл 2012, 14:57

AlexandrNikulin писал(а):Подскажите, пожалуйста, как передать значение не примитивов данных (массивов примитивов), а своего написанного класса.
что конкретно те6е нужно передать? ссылки, коллекции о6ьектов, etc...?
CEO of a company R.id.team

kalexey
Сообщения: 1
Зарегистрирован: 28 июл 2012, 16:53

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

Сообщение kalexey » 28 июл 2012, 17:09

Добрый день!
Подскажите какое время жизни интента. Допустим при передачи данных через putExtra, в вызываемом активити забираем их через getExtra в методе onCreate. Потом допустим данное активити закрывается системой (допустим повернули экран, поменяли ориентацию и вызвался метод onDestroy ). То при повторном onCreate данный интент с преданными данными будет существовать? Или из интента можно забрать данные только по первому вызову onCreate

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 30 июл 2012, 10:41

kalexey писал(а):Добрый день!
Подскажите какое время жизни интента. Допустим при передачи данных через putExtra, в вызываемом активити забираем их через getExtra в методе onCreate. Потом допустим данное активити закрывается системой (допустим повернули экран, поменяли ориентацию и вызвался метод onDestroy ). То при повторном onCreate данный интент с преданными данными будет существовать? Или из интента можно забрать данные только по первому вызову onCreate
Накидал пример. Данные из Intent можно получать каждый раз после поворота экрана. Где-то он их хранит и каждый раз передает в Activity.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

true_mas
Сообщения: 1
Зарегистрирован: 01 янв 2013, 15:32

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

Сообщение true_mas » 01 янв 2013, 15:38

а как можно передать значение int-ой переменно из класса унаследованного от Activity в класс, который унаследован от SurfaceView или View?

gad007
Сообщения: 10
Зарегистрирован: 06 фев 2013, 20:47

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

Сообщение gad007 » 08 фев 2013, 16:12

скажите пожалуйстаа можно ли сделать так чтоб в активити в которое приходят данные выводило бы их в виде списка.
как то так:
данные1
данные2
....
данныеn

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 12 фев 2013, 21:17

Тут недавно столкнулся с тем, что моя активити была запущена в режиме синглтон и новые данные через Intent она не получала. Если активити была при вызове в памяти устройства, то на вход получался Intent, который был сформирован при первом вызове.

Чтоб в таком случае отловить новый Intent, нужно перекрыть метод onNewIntent в активити.

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

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

Сообщение rezak90 » 12 фев 2013, 22:23

интересно, что это за активити должно быть что бы держать её в памяти?
R.id.team
Политика на форуме запрещена

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 12 фев 2013, 22:29

rezak90 писал(а):интересно, что это за активити должно быть что бы держать её в памяти?
В моем случае это не активити, это взаимодействие с аппаратом. Я заметил следующее, что если нажать кнопку back на устройстве, то активити выгружается, а если нажать кнопку home, то оно остается в памяти. В результате, когда я сворачивал приложение кнопкой home и вызывал заново приложение через кнопку на виджете, я не получал обновленные Extra данные, то есть я получал старый Intent.

П.С. В общем-то мелочь, но она раздражала, так как на виджете выбирается дата и она не обновлялась в приложении.

Perewozcheg
Сообщения: 3
Зарегистрирован: 29 сен 2013, 15:14

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

Сообщение Perewozcheg » 05 окт 2013, 21:02

код в майнактивити
[syntax=java5] package com.mycompany.svetofor;

import android.app.*;
import android.os.*;
import android.view.View.*;
import android.widget.*;
import android.view.*;
import android.content.*;

public class MainActivity extends Activity implements OnClickListener
{
@Override

Button btnred;
Button btngreen;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnred = (Button) findViewById(R.id.btnred);
btngreen = (Button) findViewById(R.id.btngreen);

btngreen.setOnClickListener(this);
btnred.setOnClickListener(this);
}


public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this, AboutActivity.class);
switch (v.getId())
{
case R.id.btngreen:
intent.putExtra("user", "green");
startActivity(intent);
break;
case R.id.btnred:
intent.putExtra("user", "red");
startActivity(intent);
break;
}
}
} [/syntax]
код эбаутактивити

[syntax=java5] package com.mycompany.svetofor;

import android.app.*;
import android.os.*;
import android.widget.*;

public class AboutActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
String user = getIntent().getStringExtra("user");
TextView aboutText = (TextView) findViewById(R.id.aboutText);
//aboutText.setText(user);
if(user=="green")
aboutText.setText(R.string.aboutt);
else
if(user=="red")
aboutText.setText(R.string.abou);
else
aboutText.setText("Ничего не нажал");
}
}
[/syntax]
почему условие не выполняется?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 05 окт 2013, 21:57

[quote="Perewozcheg"][/quote]
У меня ещё мало опыта, могу не угадать где ошибка.
Из урока:

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

Intent intent = getIntent();
    
    String fName = intent.getStringExtra("fname");
    String lName = intent.getStringExtra("lname");
А ниже, Ваш код:

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

String user = getIntent().getStringExtra("user");
Эти фрагменты отличаются, может в этом ошибка.

И ещё,
import android.app.*;
import android.os.*;
import android.widget.*;
так обычно не пишут (это звёздочки в конце классов), а используют только те классы которые нужны.
Удалите все import, а затем нажмите кнопки shift+ctrl+O (т.е. буква O) и добавятся только те классы, которые необходимы.

Рекомендую пользоваться логированием
т.е. вначале класса объявили переменную
final String LOG_TAG = "myLogs";
а далее, где нужно
Log.d(LOG_TAG, " значение ID = " + rowID);
и ошибки смотреть на закладке LogCat в eclipse по тегу "myLogs" (без кавычек)
пример логирования из урока 34
http://startandroid.ru/ru/uroki/vse-uro ... qlite.html
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Perewozcheg
Сообщения: 3
Зарегистрирован: 29 сен 2013, 15:14

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

Сообщение Perewozcheg » 05 окт 2013, 22:48

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

Perewozcheg
Сообщения: 3
Зарегистрирован: 29 сен 2013, 15:14

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

Сообщение Perewozcheg » 07 окт 2013, 12:06

разобрался я с вопросом. оказалось что строки на прямую сравнивать нельзя. надо через equals

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

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

Сообщение Mike » 14 окт 2013, 15:06

Падает приложение в, казалось бы, невозможном месте (startActivity(intent);). Переделываю программу в части работы с БД, до сих пор все это уже стабильно работало и мне кажется, к данному участку кода манипуляции с БД вообще не имеют отношения. Но в чем же тогда может быть дело (подскажите, плз, хотя бы тип/вид возможной ошибки)? В LogCat пока мало понимаю, но видно, что точка M1 пройдена, а до точки "00 при создании" не дошло ((... Но между ними же практически ничего нет!

фрагмент кода в MainActivity.java:

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

case R.id.btnNew :
                   // открываем пустую формочку элемента со значением тек.МХ
                  Intent intent = new Intent( this, CardActivity. class);
                  intent.putExtra( "intCurStorPlaceId" , intCurStorPlaceId );
                  intent.putExtra( "fullPathStorPlace" , fullPathStorPlace );
                  intent.putExtra( "key" , "btnNew" );
                  Log. d( LOG_TAG, "M1 intent" );
                  startActivity(intent);
                  break;
фрагмент CardActivity.java:

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

public void onCreate(Bundle savedInstanceState) {
            super .onCreate(savedInstanceState);
            setContentView(R.layout. card );
            Log. d( LOG_TAG, "00 при создании" );
            ........
LogCat:

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

09-28 10:10:43.595: D/myLogs(15079): M1 intent
09-28 10:10:43.644: D/AndroidRuntime(15079): Shutting down VM
09-28 10:10:43.644: W/dalvikvm(15079): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-28 10:10:43.675: E/AndroidRuntime(15079): FATAL EXCEPTION: main
09-28 10:10:43.675: E/AndroidRuntime(15079): java.lang.NullPointerException
09-28 10:10:43.675: E/AndroidRuntime(15079):      at com.my.inventory.MainActivity.onClick(MainActivity.java:175)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at android.view.View.performClick(View.java:2408)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at android.view.View$PerformClick.run(View.java:8816)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at android.os.Handler.handleCallback(Handler.java:587)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at android.os.Handler.dispatchMessage(Handler.java:92)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at android.os.Looper.loop(Looper.java:123)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at android.app.ActivityThread.main(ActivityThread.java:4627)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at java.lang.reflect.Method.invokeNative(Native Method)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at java.lang.reflect.Method.invoke(Method.java:521)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-28 10:10:43.675: E/AndroidRuntime(15079):      at dalvik.system.NativeStart.main(Native Method)
09-28 10:10:48.195: I/Process(15079): Sending signal. PID: 15079 SIG: 9

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

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

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

09-28 10:10:43.675: E/AndroidRuntime(15079): at com.my.inventory.MainActivity.onClick(MainActivity.java:175)
сюда два раза щелкаешь. Дальше уже просто устала повторять.
R.id.team

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

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 14 окт 2013, 15:35

[quote="Mike"][/quote]
Может в файле манифеста не прописана вторая активность? (или имя там указано с ошибкой)
Или поэкспериментируйте:
1. Создайте новую активность, и попытайтесь её открыть (без передачи параметров)
2. Если получился шаг 1. Передайте один параметр.
и т.д. так и обнаружите в чём ошибка.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Ответить