Страница 1 из 6

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

Добавлено: 27 окт 2011, 03:00
damager82
В этом уроке:

- передаем данные с помощью Intent

Click here to read this article!

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

Добавлено: 12 янв 2012, 14:35
VitaMin00
Здравствуйте. Подскажите пожалуйста, никак не могу понять и хелп тоже не спас. Если за место String, я хочу передать другой тип данных, например int number1=0; как это организовать?

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

Добавлено: 12 янв 2012, 14:52
RagnarR
VitaMin00 писал(а):Здравствуйте. Подскажите пожалуйста, никак не могу понять и хелп тоже не спас. Если за место String, я хочу передать другой тип данных, например int number1=0; как это организовать?
Просто вместо putString() используешь метод putInt()

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

Добавлено: 12 янв 2012, 21:31
VitaMin00
вот:
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnActTwo:
Intent intent = new Intent(this, ActivityTwo.class);
intent.putExtra("lname", tvOut.getText().toString()); --------- тут хватаю string из textView под id tvOut.
intent.putExtra("intn1", number1); -----правильно беру int ( int number1=2) ???
startActivity(intent);
break;
------
String LName = intent.getStringExtra("lname");
int number0 = intent....... что я тут должен написать?

tv0102.setText(" бла бла бла "+ LName+ number0);

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

Добавлено: 12 янв 2012, 23:16
damager82
VitaMin00 писал(а):вот:
int number0 = intent....... что я тут должен написать?
Метод getIntExtra (http://developer.android.com/reference/ ... ng,%20int))
Там задаете ваш ключ "intn1" и значение по умолчанию, например 0.

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

Добавлено: 13 янв 2012, 08:50
VitaMin00
Всё сработало, спасибо большое ;-)

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

Добавлено: 17 фев 2012, 11:51
marmota
Спасибо за урок.
Может это немного не в контексте обсуждаемого в уроке, но подскажите:
Как в реальных приложениях на Android принято с этими переменными обращаться

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

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

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

String fname = intent.getStringExtra("fname");
String lname = intent.getStringExtra("lname");
не будешь же всегда помнить, что передаешь "fname", к примеру.
static final переменные создаются в том Activity, которое передает переменные или как-то по-другому принято?

Спасибо!!!

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

Добавлено: 17 фев 2012, 13:35
damager82
Я не встречал чего-то общепринятого.

Сейчас, например, пишу приложение и все такие static final переменные храню просто в отдельном классе Common.

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

Добавлено: 31 мар 2012, 13:57
chuikoff
Сейчас, например, пишу приложение и все такие static final переменные храню просто в отдельном классе Common.
А как потом подключаете этот класс и используете его переменные, расскажите пожалуйста с примером кода.

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

Добавлено: 31 мар 2012, 15:46
chuikoff
Всё сделал как в вашем уроке, но мне null приходит, в чём может быть проблема?

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

Добавлено: 31 мар 2012, 22:42
andev
chuikoff писал(а):Всё сделал как в вашем уроке, но мне null приходит, в чём может быть проблема?
в ошибочном коде. Выложите, сразу станет ясно

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

Добавлено: 01 апр 2012, 03:45
chuikoff
andev писал(а):
chuikoff писал(а):Всё сделал как в вашем уроке, но мне null приходит, в чём может быть проблема?
в ошибочном коде. Выложите, сразу станет ясно
KamchatkaActivity.java:

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

public class KamchatkaActivity extends Activity implements OnClickListener {
	
	EditText request;
	Button search;
	
	/** Вызываем при загрузке. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        request = (EditText) findViewById(R.id.editText1);
        search = (Button) findViewById(R.id.button1);
        search.setOnClickListener(this);
    }
    
    /** Запускаем при клике поиск. */
    public void onClick(View v)
    {
    	Intent i = new Intent(this, Search.class);
	i.putExtra("request", request.getText()).toString();
    	startActivity(i);
    }
}
Search.java:

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

public class Search extends Activity {
	/** Вызываем при загрузке. */
	@Override
	public void onCreate(Bundle savedInstantState){
		super.onCreate(savedInstantState);
		setContentView(R.layout.search);
		
		Intent intent = getIntent();
		
		TextView title = (TextView)findViewById(R.id.title);
		
		String request = intent.getStringExtra("request");
		title.setText("Поиск: "+request);
	}

}
Вот.

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

Добавлено: 01 апр 2012, 11:43
andev
У вас скобка не там, вы не тест кладете, а объект, естественно там Null

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

// у вас
i.putExtra("request", request.getText()).toString();
// нужно
i.putExtra("request", request.getText().toString());

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

Добавлено: 02 апр 2012, 10:12
chuikoff
Спасибо!)

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

Добавлено: 10 июн 2012, 09:21
Крысёна
Доброго времени суток!
Проблема такая, нужно передать внутри Intent данные из ArrayList<String>. Но так, чтобы все данные отобразились во втором Activity сразу. Пыталась сделать это так:

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

package ru.startandroid.develop.myproject_01;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

	Button b1;
	ArrayList<String> aList;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		aList = new ArrayList<String>();
		for (int i = 0; i < 7; i++) {
			aList.add(Integer.toString(i));
		}
		b1 = (Button) findViewById(R.id.b1);
		b1.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		Intent intent = new Intent(this, TwoActivity.class);
		for (int j = 0; j < 7; j++) {
			intent.putExtra("list", aList.get(j));
		}
		startActivity(intent);

	}
}
Но при такой передаче запоминается только последняя запись, которая и отображается во втором Activity.
Если метод startActivity(intent); засунуть в цикл, то открывается семь Activity, что вполне логично. Я понимаю, что мой вопрос глупый, но как это сделать? Как реализовать передачу ArrayList'а?

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

Добавлено: 10 июн 2012, 10:49
Prospekt
Способ быстрый, но не правильный:

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

intent.putExtra("List_size", aList.size());
for(int i=0; i<aList.size();i++){
      intent.putExtra("list_"+Integer.toString(i), aList.get(i));
}
Почему неправильный?
1) существует вероятность пересечения имен с другими массивами
2) Если надо передать свой тип, то используйте (желательно) возможности Parsable
3) Если надо передать массив простых значений, к которому относится же и String, то у интента есть метод

putExtra(String _key, String[] _values)
И в вашем случае можно сделать просто

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

String[] array = (String[]) aList.toArray();
intent.putExtra("List_array", array);
Но при такой передаче запоминается только последняя запись, которая и отображается во втором Activity.
Ясен пень, что отображаться будет только одна.
Хеш таблица - это массив с произвольным ключом, если в двух словах.

Если Вы сделаете так: (псевдокод)
data["a"] = "1";
data["a"] = "2";
data["a"] = "3";

то в конце data["a"] будет содержать значение "3".
Каждый вызов putExtra("list", "something"); ложит в ячейку "list" соответствуещее значение, затирая предыдущее, если оно конечно там было.

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

Добавлено: 10 июн 2012, 11:47
Крысёна
Спасибо большое. То, что надо :)
Prospekt писал(а): 3) Если надо передать массив простых значений, к которому относится же и String, то у интента есть метод

putExtra(String _key, String[] _values)
И в вашем случае можно сделать просто

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

String[] array = (String[]) aList.toArray();
intent.putExtra("List_array", array);
Это верно, можно сделать и проще, но задача была именно такая - передать ArrayList.
Благодарю за помощь!

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

Добавлено: 16 июл 2012, 15:15
Artemko
мне нужно передать картинку для imagebutton, тоесть нажимаем на кнопку, выбираем картинку, возвращаемся с результатом и присваиваем эту картинку ImageButton'у. Какой тип данных для этого использовать?

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

Добавлено: 17 июл 2012, 11:16
damager82
Artemko писал(а):мне нужно передать картинку для imagebutton, тоесть нажимаем на кнопку, выбираем картинку, возвращаемся с результатом и присваиваем эту картинку ImageButton'у. Какой тип данных для этого использовать?
Правильнее передавать не саму картинку, а ее адрес картинки в проекте/файловой системе/контенте.
Если картинка из инета, то при первом скачивании сохраняете куда-нить, и опять же этот адрес и передаете в Intent.

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

Добавлено: 18 июл 2012, 09:35
Artemko
как правильно передать адрес картинки, которая находится в проекте и потом присвоить? Можно пример плиз)