2

アプリで新しい連絡先のショートカットを作成するか、既存の連絡先を編集するかを指定するために、2 つのエクストラを使用する連絡先の選択方法があります。

問題は、私が何をしても、エクストラが常に null のように見え、それらにアクセスしようとすると nullPointerException が発生することです。

インテント タイプを に設定するとContactsContract.Contacts.CONTENT_TYPE、ユーザー定義のエクストラがリセットされるのではないかと思いますが、よくわかりません。

現時点で私がやっていることは次のとおりです。

連絡先ピッキングの意図

 Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
                Bundle extras = new Bundle();
                extras.putBoolean("isEditing", isEditing);
                extras.putLong("shortcut", shortcut.getId());
                intent.putExtras(extras);
                startActivityForResult(intent, PICK_CONTACT_REQUEST);

そしてonActivityResult()で

switch (requestCode) {
            case (PICK_CONTACT_REQUEST):
                if (resultCode == getActivity().RESULT_OK) {
                    Uri contactData = data.getData();
                    Bundle bundle = data.getExtras();
                    Boolean isEditing = false;
                    long shortcutId = 0;
                    if (bundle != null) {
                        Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show();
                        if (bundle.containsKey("isEditing")) {
                            isEditing = bundle.getBoolean("isEditing", false);
                            Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show();
                        }
                        if (bundle.containsKey("shortcutId")) {
                            shortcutId = bundle.getLong("shortcutId", 0);
                            Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show();
                        }
                    }

バンドルが見つからないため、トーストは表示されません。私も別のワークフローを試しました.使用してから、エクストラをバンドルに詰め込むのIntent.putExtraString("isEditing", value)をスキップして取得しましintent.getStringExtra("isEditing", false)た(2つのワークフローの違いをよく理解していません)が、残念ながら同じ問題に直面しました.

どんな助けでも大歓迎です。

4

1 に答える 1

-1

編集:あなたのlong価値を置くとき、あなたはそうします

extras.putLong("shortcut", shortcut.getId());

したがって、次のように取得する必要があります

long shortcutId = bundle.getLong("shortcut", 0);

次に、以下のように、を起動しBundleた からエクストラを取得する必要があります。IntentActivity

switch (requestCode) {
    case (PICK_CONTACT_REQUEST):
        if (resultCode == getActivity().RESULT_OK) {
            Uri contactData = data.getData();
            //Here you get the intent extras
            Bundle bundle = getIntent().getExtras();
            //Boolean isEditing = false;
            //long shortcutId = 0;
            if (bundle != null) {
                Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show();
                if (bundle.hasExtras()){
                    boolean isEditing = bundle.getBoolean("isEditing", false);                            
                    long shortcutId = bundle.getLong("shortcut", 0);
                    if(isEditiong != null)
                        Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show();
                    if(shortcutId != null)
                        Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show();
                }
            }
        }            
    }
    break;
}
于 2015-01-31T13:34:20.313 に答える