Как получить дополнительные данные от намерения на 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, так что, надеюсь, это будет полезно для вас и других при разработке приложений.