Как получить дополнительные данные от намерения на Android?
Как я могу отправить данные из одного действия (намерения) другому?
Я использую этот код для отправки данных:
Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);
Ответы
Ответ 1
Сначала получите намерение, с которого началась ваша деятельность, с помощью getIntent()
:
Intent intent = getIntent();
Если ваши дополнительные данные представлены в виде строк, вы можете использовать intent.getStringExtra(String name)
. В твоем случае:
String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");
Ответ 2
В принимающей активности
Bundle extras = getIntent().getExtras();
String userName;
if (extras != null) {
userName = extras.getString("name");
// and get whatever type user account id is
}
Ответ 3
// How to send value using intent from one class to another class
// class A(which will send data)
Intent theIntent = new Intent(this, B.class);
theIntent.putExtra("name", john);
startActivity(theIntent);
// How to get these values in another class
// Class B
Intent i= getIntent();
i.getStringExtra("name");
// if you log here i than you will get the value of i i.e. john
Ответ 4
Add-вверх
Установить данные
String value = "Hello World!";
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("sample_name", value);
startActivity(intent);
Получить данные
String value;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
value = bundle.getString("sample_name");
}
Ответ 5
Вместо инициализации другого нового намерения для получения данных просто выполните следующее:
String id = getIntent().getStringExtra("id");
Ответ 6
Если используется в FragmentActivity, попробуйте следующее:
Первая страница расширяет FragmentActivity
Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);
В фрагменте вам просто нужно сначала вызвать getActivity()
,
Вторая страница расширяет Фрагмент:
String receive = getActivity().getIntent().getExtras().getString("name");
Ответ 7
Если вы пытаетесь получить дополнительные данные в фрагментах, вы можете попробовать:
Поместите данные, используя:
Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER);
Получить данные с помощью:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getArguments().getInt(ARG_SECTION_NUMBER);
getArguments().getString(ARG_SECTION_STRING);
getArguments().getBoolean(ARG_SECTION_BOOL);
getArguments().getChar(ARG_SECTION_CHAR);
getArguments().getByte(ARG_SECTION_DATA);
}
Ответ 8
Вы можете получить любой тип дополнительных данных из намерения, независимо от того, является ли это объектом, строкой или любым типом данных.
Bundle extra = getIntent().getExtras();
if (extra != null){
String str1 = (String) extra.get("obj"); // get a object
String str2 = extra.getString("string"); //get a string
}
и самое короткое решение:
Boolean isGranted = getIntent().getBooleanExtra("tag", false);
Ответ 9
Котлин
Первое занятие
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)
Второе занятие
val value = getIntent().getStringExtra("key")
Предложение
Всегда помещайте ключи в постоянный файл для более управляемого пути.
companion object {
val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}
Ответ 10
Просто предложение:
Вместо использования "id" или "name" в вашем i.putExtra( "id".....), я бы предложил, когда имеет смысл, использовать текущие стандартные поля, которые можно использовать с putExtra (), то есть Intent.EXTRA_something.
Полный список можно найти в Intent (разработчики Android).
Ответ 11
Мы можем сделать это с помощью простых средств:
В FirstActivity:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);
В SecondActivity:
try {
Intent intent = getIntent();
String uid = intent.getStringExtra("uid");
String pwd = intent.getStringExtra("pwd");
} catch (Exception e) {
e.printStackTrace();
Log.e("getStringExtra_EX", e + "");
}
Ответ 12
Передайте намерение со значением в первом действии:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);
Получить намерение на второй деятельности; -
Intent intent = getIntent();
String user = intent.getStringExtra("uid");
String pass = intent.getStringExtra("pwd");
Обычно мы используем два метода, чтобы отправить значение и получить его. Для отправки значения мы будем использовать intent.putExtra("key", Value);
и во время получения намерения на другое действие мы будем использовать intent.getStringExtra("key");
чтобы получить данные о намерениях в виде String
или использовать другой доступный метод для получения других типов данных (Integer
, Boolean
и т.д.). Ключом может быть любое ключевое слово, чтобы идентифицировать значение, значит, какое значение вы разделяете. Надеюсь, это сработает для вас.
Ответ 13
Вы также можете сделать это в этом
// помещать значение в намерение
Intent in = new Intent(MainActivity.this, Booked.class);
in.putExtra("filter", "Booked");
startActivity(in);
//получить значение из намерения
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String filter = bundle.getString("filter");
Ответ 14
Получение разных типов дополнительных возможностей [/h1 >
Чтобы получить доступ к данным из Intent, вы должны знать две вещи.
- KEY
- DataType ваших данных.
В классе Intent существуют различные методы для извлечения различных типов данных.
Похоже на это
getIntent(). XXXX (KEY) или намерение .XXX(KEY);
Поэтому, если вы знаете тип данных вашей varibale, который вы установили в otherActivity, вы можете использовать соответствующий метод.
Пример для извлечения строки из вашей активности из намерения
String profileName = getIntent().getStringExtra("SomeKey");
Список различных вариантов методов для разных типов данных
Вы можете просмотреть список доступных методов в Официальной документации Intent.
Ответ 15
Это для адаптера, для активности вам просто нужно изменить mContext на ваше имя Activty, а для фрагмента вам нужно изменить mContext на getActivity()
public static ArrayList<String> tags_array ;// static array list if you want to pass array data
public void sendDataBundle(){
tags_array = new ArrayList();
tags_array.add("hashtag");//few array data
tags_array.add("selling");
tags_array.add("cityname");
tags_array.add("more");
tags_array.add("mobile");
tags_array.add("android");
tags_array.add("dress");
Intent su = new Intent(mContext, ViewItemActivity.class);
Bundle bun1 = new Bundle();
bun1.putString("product_title","My Product Titile");
bun1.putString("product_description", "My Product Discription");
bun1.putString("category", "Product Category");
bun1.putStringArrayList("hashtag", tags_array);//to pass array list
su.putExtras(bun1);
mContext.startActivity(su);
}
Ответ 16
Я только что разместил ответ здесь, который более подробно описывает этот вопрос, в том числе некоторые альтернативы.
В нем используется Vapor API, новая система Android, основанная на jQuery, которую я написал для упрощения Android dev. Посмотрите пример в этом ответе о том, как вы можете легко передавать данные между действиями.
Также он демонстрирует VaporIntent
, который позволяет вам цеплять вызовы методов и использовать перегруженный метод .put(...)
:
$.Intent().put("data", "myData").put("more", 568)...
Вы можете легко передавать данные по всему вашему приложению, используя Vapor API, так что, надеюсь, это будет полезно для вас и других при разработке приложений.