Как получить дополнительные данные от intent на Android?
Как я могу отправлять данные из одного действия (намерения) в другое?
Я использую этот код для отправки данных:
Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);
15 ответов
во-первых, получите намерение, которое начало вашу деятельность с помощью getIntent()
способ:
Intent intent = getIntent();
если ваши дополнительные данные представлены в виде строк, то можно использовать intent.getStringExtra(String name)
метод. В вашем случае:
String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");
в принимающем действии
Bundle extras = getIntent().getExtras();
String userName;
if (extras != null) {
userName = extras.getString("name");
// and get whatever type user account id is
}
// 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
добавить вверх
Набор Данных
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");
}
вместо того, чтобы инициализировать другое новое намерение для получения данных, просто сделайте следующее:
String id = getIntent().getStringExtra("id");
Если используется в 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");
Если вы пытаетесь получить дополнительные данные, в фрагменты то вы можете попробовать использовать :
разместить данные с помощью:
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);
}
вы можете получить любой тип дополнительного datan от intent, независимо от того, является ли это объектом или sting или anytype данных.
Bundle extra = getIntent().getExtras();
if (extra != null){
String str1 = (String) extra.get("obj"); // get a object
String str2 = extra.getString("string"); //get a string
}
просто предложение:
вместо использования "id" или "name" в вашем i.putExtra ("id".....), Я бы предложил, когда это имеет смысл, использовать текущие стандартные поля, которые можно использовать с putExtra (), т. е. Intent.EXTRA_something.
полный список можно найти в намерение (Разработчиков Android).
мы можем сделать это с помощью простых средств:
В 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 + "");
}
вы также можете сделать такой
// поместить значение в намерениях
Intent in = new Intent(MainActivity.this, Booked.class);
in.putExtra("filter", "Booked");
startActivity(in);
/ / получить значение от intent
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String filter = bundle.getString("filter");
получение различных типов дополнительных от Intent
для доступа к данным из Intent вы должны знать две вещи.
- ключ
- тип данных.
в классе Intent существуют различные методы для извлечения различных типов данных. Это выглядит так
getIntent ().XXXX (ключ) или намерение.XXX (КЛЮЧ);
Поэтому, если вы знаете тип данных вашего varibale, который вы установили в otherActivity вы можете использовать соответствующий метод.
пример для извлечения строки в вашей деятельности из Intent
String profileName = getIntent().getStringExtra("SomeKey");
список различных вариантов методов для разных типов данных
вы можете увидеть список доступных методов в официальной документации намерение.
Это для адаптера, для активности вам просто нужно изменить 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);
}
передайте намерение со значением на первом действии:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);
получить намерение на второе действие; -
Inetent intent=getIntent();
String User=intent.getStringExtra("uid");
String Pass=intent.getStringExtra("pwd");
мы обычно используем два метода для отправки значения и получения значения.
Для отправки значения мы будем использовать intent.putExtra("Key",Value);
и во время получения намерения на другую деятельность мы будем использовать intent.getStringExtra("Key");
, здесь ключ может быть любым ключевым словом для определения значения означает, что какое значение вы разделяете.
Надеюсь, это сработает.
Я только что опубликовал ответ здесь это охватывает эту тему немного более подробно, включая некоторые альтернативы.
использует Vapor API, новый jQuery вдохновил Android framework я написал, чтобы упростить Android dev. Проверьте пример в этом ответе, как вы можете легко передавать данные между активностями.
также он демонстрирует VaporIntent
, что позволяет вам связывать вызовы методов и использовать перегруженный .put(...)
метод:
$.Intent().put("data", "myData").put("more", 568)...
вы можете легко передавать данные по всему приложению, используя Vapor API, так что надеюсь, это будет полезно для вас и других в процессе разработки приложения.