Как получить дополнительные данные от intent на Android?



Как я могу отправить данные из одного вида деятельности (намерения) в другой?



Я использую этот код для отправки данных:



Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);
744   15  

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);

}

вы можете получить любой тип дополнительных данных от intent, независимо от того, если это объект или жало или 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 = getIntent();
    Bundle bundle = intent.getExtras();
    String filter = bundle.getString("filter");

получение различных типов дополнительных от Intent

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

  • ключ
  • тип данных.

существуют различные методы в классе Intent для извлечения различных типов данных. Это выглядит так

getIntent ().XXXX (ключ) или намерение.XXX (КЛЮЧ);


Поэтому, если вы знаете тип данных вашего varibale, который вы установили в otherActivity вы можете использовать соответствующий метод.

например, чтобы получить строку в ваших действиях умысла

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

Comments

    Ничего не найдено.