如何将Uri值传递给bundle值

时间:2017-01-17 08:39:12

标签: java android

以下代码提取多个联系人并将其存储在一个包中:

 Intent phonebookIntent = new Intent("intent.action.INTERACTION_TOPMENU");
    phonebookIntent.putExtra("additional", "phone-multi");
    phonebookIntent.putExtra("maxRecipientCount", MAX_PICK_CONTACT);
    phonebookIntent.putExtra("FromMMS", true);
    startActivityForResult(phonebookIntent, REQUEST_CODE_PICK_CONTACT);

以下代码检索所选数据:

  if (requestCode ==  REQUEST_CODE_PICK_CONTACT) {

            Uri contractData = data.getData();

            Bundle contantData =  data.getExtras();
            String result= contantData.getString("result");
            ArrayList<String> contacts = contantData.getStringArrayList("result");
            ContactRetriever cr = new ContactRetriever(getApplicationContext(), contacts);
            Person p = cr.getPerson();

我想要Uri中的数据,以便我可以在其他引用Uri数据的类中使用它。

如何将捆绑值传递给Uri数据?

使用Uri数据作为&#34; contactData&#34;:

的另一个例子
private String getNumber() {
    String ret = null;


    Cursor cId = cr.query(contractData, new String[]{ContactsContract.Contacts._ID}, null, null, null);

    if (cId.moveToFirst()){
        id = cId.getString(cId.getColumnIndex(ContactsContract.Contacts._ID));
        Log.i(TAG + " IDs: ", id);
    }
    cId.close();

    Cursor cNum = cr.query(contractData, null, null, null, null);

    if (cNum.moveToNext()){
        ret = cNum.getString(cNum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        Log.i(ret, TAG + " NUMBERS: ");
    }
    return ret;
}

private String getName() {
    String ret = null;

    Cursor c = cr.query(contractData, null, null, null, null);
    if (c.moveToFirst())
        ret = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

    c.close();
    Log.i(TAG + "NAMES: ", ret);
    return ret;
}

contractData示例的具体用法:

Cursor cId = cr.query(contractData, new String[]{ContactsContract.Contacts._ID}, null, null, null);

Cursor cNum = cr.query(contractData, null, null, null, null);

Cursor c = cr.query(contractData, null, null, null, null);

2 个答案:

答案 0 :(得分:7)

Uri实现了parceleable,因此您无法简单地传递intent.putExtra(),而是必须以这种方式使用它:

phonebookIntent.putParceleableExtra("uri", your_uri_object);

读回来:

Uri uri =  getIntent().getParcelableExtra("uri");

答案 1 :(得分:3)

您可以使用toString函数将Uri作为字符串传递,然后将其解析为Uri。

因此,要将其作为URI的一部分发送:

phonebookIntent.putExtra("uri", uriData.toString());

要读回来:

Uri uriData = Uri.parse(extras.getString"uri"));