19

私はこのコードを持っています:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        intent.setData(ContactsContract.Contacts.CONTENT_URI);
        intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag());
        startActivityForResult(intent, PICK_CONTACT);

その後、応答時に:

public void onActivityResult(int reqCode, int resultCode, Intent data) {


        switch (reqCode) {
            case (PICK_CONTACT):
                if (resultCode == Activity.RESULT_OK) {
                    try {
                        Uri contactData = data.getData();
                        String onlineid = data.getStringExtra(EXTRA_ONLINE_ID);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                break;
        }
        super.onActivityResult(reqCode, resultCode, data);
    }

onlineid変数はnullです。値を渡してから受け取るにはどうすればよいですか?

編集

私も試しました、

Bundle extras = data.getExtras(); // returns null
4

4 に答える 4

6

これは設計によって行われます。システムアクティビティは、呼び出されたエクストラを返送しないため、他の場所でデータを管理する必要があります。

幸い、resultCodeパラメータは自分で完全に制御されます。つまり、パラメータを使用してデータにインデックスを付けることができます。

private final int PICK_CONTACT = 0;
private Bundle[] myDataTransfer = { null };

...

Bundle myData = new Bundle();
myData.putString(EXTRA_ONLINE_ID, (String) v.getTag());
myDataTransfer[PICK_CONTACT] = myData;
// create intent and all
startActivityForResult(intent, PICK_CONTACT);

...

public void onActivityResult(int reqCode, int resultCode, Intent data) {
    if (resultCode == PICK_CONTACT) {
        Bundle myData = myDataTransfer[resultCode];
        String onlineid = myData.getString(EXTRA_ONLINE_ID);
    }
}

私はJavaプログラマーではないので、バンドルのマップを実装するためのより良い方法があるはずですが、これは機能します:)

于 2013-04-18T03:28:42.547 に答える
0

okアクティビティandroid:launchModeがSingleTaskまたはSingleInstanceとして構成されているかどうかを確認してください。それが問題に違いない:)

于 2010-05-18T18:52:55.193 に答える
0

EXTRA_ONLINE_IDフィールドは、setResultを使用して起動したアクティビティで設定する必要があります。返されたインテントにその値が設定されていない場合(送信したものとは異なります)、null値を取得します。

于 2011-03-15T07:05:14.877 に答える
-1

私もこれでいくつかの問題に遭遇していました。

この行の代わりに

 intent.putExtra(EXTRA_ONLINE_ID, (String) v.getTag());

試す

 intent.putExtra(EXTRA_ONLINE_ID, "" + v.getTag());
于 2010-08-04T05:23:50.580 に答える