Androidでインテントから追加のデータを取得するにはどうすればよいですか?


750

あるアクティビティ(インテント)から別のアクティビティにデータを送信するにはどうすればよいですか?

このコードを使用してデータを送信します。

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

82
Javaサイドノート:そのような整数を(特に例の目的で)「ストリング化」することは決して良い考えではありません。残念ながら、java:user.getUserAccountId()+""でintを文字列に変換する優れた迅速な方法と見なされることがよくあります。不要なオブジェクトが作成されるためです。収集されます。String.valueOf(user.getUserAccountId)またはの使用を検討してくださいInteger.toString(user.getUserAccountId)
2013

5
@Andrew SこれはWebではありませんか?これは「意図からデータを取得する」の
最大の

@AndrewS私はMcGuileに同意します。また、この質問はしばらく前に投稿されたため、おそらく答えを見つけるのはそれほど簡単ではなかったでしょう。同様の質問がまだSOに投稿されていない場合、それは有効な投稿でした。
0xCursor

回答:


1212

まず、getIntent()メソッドを使用してアクティビティを開始したインテントを取得します。

Intent intent = getIntent();

追加データが文字列として表されている場合は、intent.getStringExtra(String name)メソッドを使用できます。あなたの場合:

String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");

6
どこから私はこのすべての方法を行うことができますか?
Adham 2010年

46
@adham:アクティビティに参加している場合は、onCreate内からgetIntent().getStringExtra("id");id文字列を取得するために呼び出します
ccheneson

1
getIntent()メソッドを呼び出すことで、アクティビティを開始したインテントを取得できます。答えを更新しました。
Malcolm

1
@Eatlon特定のライブラリに問題がある場合は、それについて別の質問を作成する必要があります。
Malcolm

1
@MelColm getExtra()。getStringとgetStringExtra()の違いは何ですか?
Amit Tripathi

188

受取り活動中

Bundle extras = getIntent().getExtras(); 
String userName;

if (extras != null) {
    userName = extras.getString("name");
    // and get whatever type user account id is
}

6
これが望ましい理由getStringExtra?
IgorGanapolsky、2015年

6
私の推測では、エキストラがの場合null、エキストラフェッチ全体をスキップできます。を使用するとgetStringExtra、基本的には一連のに変更されますif(extras != null) { return extras.getString(name) }getStringExtra呼び出すものごとに1つ。このオプションはnull1度チェックし、そうである場合は、まったく読み取りを行いませんBundle。その上、getStringExtraおそらくgetExtras内部的にも毎回尋ね続けるでしょう。つまり、関数の呼び出しが増えるだけです。
ダニエル・ソンク

39
//  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

31

加算

データを設定

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

17

データを受信するために別の新しいインテントを初期化する代わりに、次のようにします。

String id = getIntent().getStringExtra("id");

11

FragmentActivityで使用する場合は、これを試してください。

最初のページはFragmentActivityを拡張します

Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);

フラグメントでは、getActivity()最初に呼び出す必要があります、

2ページ目はFragmentを拡張します。

String receive = getActivity().getIntent().getExtras().getString("name");

1
また、getExtras()。getString( "name")の代わりにgetStringExtra( "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);

}

6

オブジェクト、文字列、またはデータの種類に関係なく、intentから任意の種類の追加データを取得できます。

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

4

**データを目的別に配置-**

 Intent intent = new Intent(mContext, HomeWorkReportActivity.class);
            intent.putExtra("subjectName","Maths");
            intent.putExtra("instituteId",22);
            mContext.startActivity(intent);

**意図によるデータの取得-**

  String subName = getIntent().getStringExtra("subjectName");
  int insId  getIntent().getIntExtra("instituteId",0);

Intentで整数値を送る場合。getIntent()。getIntExtra( "instituteId"、0) で2番目のパラメータ0を使用する必要がある場合それ以外の場合は0を使用しないため、androidでエラーが発生します。


2

コトリン

最初の活動

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)

2番目のアクティビティ

val value = getIntent().getStringExtra("key")

提案

より管理された方法のために、常にキーを定数ファイルに入れます。

companion object {
    val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}

1

ただの提案:

i.putExtra( "id" .....)で "id"または "name"を使用する代わりに、意味がある場合は、putExtra()で使用できる現在の標準フィールドを使用することをお勧めします。 Intent.EXTRA_something。

完全なリストはIntent(Android Developers)にあります。


1

私たちは簡単な方法でそれを行うことができます:

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 + "");
    }

1

最初のアクティビティの値とともにインテントを渡します。

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

2番目のアクティビティの意図を受け取る;-

Intent intent = getIntent();
String user = intent.getStringExtra("uid");
String pass = intent.getStringExtra("pwd");

通常、値を送信して値を取得するために、2つの方法を使用します。私たちが使用する値を送信するためにintent.putExtra("key", Value);、我々が使用する別の活動に熱心受信時のintent.getStringExtra("key");よう意図データを取得するStringか、他のタイプのデータ(取得するためにいくつかの他の利用可能な方法を使用してIntegerBooleanなど)。キーは、値を識別するための任意のキーワードである可能性があり、どの値を共有しているかを意味します。それがあなたのために働くことを願っています。


0

このようにすることもできます
//インテントに値を入れます

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

0

インテントからさまざまなタイプのエクストラを取得する

Intentからデータにアクセスするには、2つのことを知っておく必要があります。

  • キー
  • データのDataType。

Intentクラスには、さまざまな種類のデータ型を抽出するためのさまざまなメソッドがあります。こんな感じ

getIntent()。XXXX(KEY)またはintent.XXX(KEY);


そのため、otherActivityで設定した変数のデータ型がわかっている場合は、それぞれのメソッドを使用できます。

インテントからアクティビティの文字列を取得する例

String profileName = getIntent().getStringExtra("SomeKey");

さまざまなdataTypeのさまざまなメソッドのバリアントのリスト

使用可能なメソッドのリストは、Intentの公式ドキュメントで確認できます。


0

これはアダプタ用で、アクティビティの場合はmContextをアクティビティ名に変更するだけでよく、フラグメントの場合は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);
        }

-2

いくつかの選択肢を含め、このトピックをもう少し詳しくカバーする回答をここに投稿しました。

それは、私がAndroid開発を簡素化するために書いた新しいjQueryに触発されたAndroidフレームワークであるVapor APIを利用しています。アクティビティ間でデータを簡単に渡す方法については、その回答の例をご覧ください。

また、を示してVaporIntentいます。これにより、メソッド呼び出しをチェーンし、オーバーロードされた.put(...)メソッドを利用できます。

$.Intent().put("data", "myData").put("more", 568)...

Vapor APIを使用すると、アプリケーション全体でデータを簡単に渡すことができるので、アプリ開発中にあなたや他の人に役立つことを願っています。


1
私はVapor APIについてのあなたの答えのいくつかを見ました。興味深いです。それらのデータ(Intent.getextras()など)をどのように取得しますか?
Kalai.G 2013年

これをチェックし、Intentエキストラを取得する方法を説明します。詳細はこちら。それは役に立ちますか?
ダリアス2013年

2
メソッドをチェーンするとオーバーヘッドが多すぎると思います。チェーン可能にするために「this」を返すメソッド(つまり「セッター」)を呼び出す場合、それはOOPの設計原則に違反しています。私は単純さが好きですが、メソッドのチェーンがある場合、デバッグもおそらく苦痛です。APIに価値があると思いますが、メソッドチェーンに同意しません。
nckbrz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.