android电子邮件地址获取、存储和显示

Posted

技术标签:

【中文标题】android电子邮件地址获取、存储和显示【英文标题】:android email address getting and storing and displaying 【发布时间】:2011-06-03 13:10:34 【问题描述】:

我是安卓新手。所以我请求你对我有耐心。我正在尝试编写一个应用程序,在按下按钮时会打开联系人 API。然后用户选择联系人。然后我想在onAcitvityResult(int reqcode, int rescode, Intent data) 中获取所选联系人。有没有办法在不获取 Uri 并通过整个数据库查询它的情况下做到这一点? 这是我的第二个活动开始的代码:

public void onClick(View v) 

      Log.d(TAG, "contact button clicked");
      Toast.makeText(ctx, "Contact button clicked",
      Toast.LENGTH_SHORT).show();

      Intent contacts = new Intent(Intent.ACTION_GET_CONTENT,Contacts.CONTENT_URI);
      contacts.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);

      startActivityForResult(contacts,1);

我使用Contacts.CONTENT_URIIntent.ACTION_GET_CONTENT 是否正确?

我使用的意图是否正确? 我觉得我应该在此处包含电子邮件详细信息。

这是我处理活动结果的地方:

protected void onActivityResult(int requestCode, int resultCode, Intent data)

    super.onActivityResult(requestCode, resultCode, data);
    String email=""; long id;
    if (requestCode == 1) 
        if (resultCode == Activity.RESULT_OK) 

            // get the contact ID
            Uri contacturi= data.getData();
            Cursor c= getContentResolver().query(contacturi,null,null,null,null);
            id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID));
            c.close();

            // get the data package containing the email address for the contact
            c=getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                    new String[]Email.DATA1, 
                    ContactsContract.Data.CONTACT_ID + "=? AND " + Email.MIMETYPE + "=?",
                    new String[]String.valueOf(id), Email.CONTENT_ITEM_TYPE, null);

            email=c.getString(c.getColumnIndex(Email.DATA1));
            Log.d(TAG, "email is" + email);
        
    
    else 
        Log.d(TAG, "requestCode is not 1");
    

    EditText ctext= (EditText) findViewById(R.id.contacttxt);
    ctext.append(email);
    Log.d(TAG, "onActivityResult() ends");

我收到一个运行时异常,提示 failure delivering result。 我应该包括一些setResult() 方法吗?? 提前谢谢你。

【问题讨论】:

代码示例会很棒。 我应该使用广播接收器吗?这会有什么不同吗?任何见解将不胜感激。 我尝试调试并查明问题所在。它在这一行: id=c.getDouble(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 我发现了错误。错误是 c.getDouble(....) 不起作用。而是制作 id int 并且不要使用 c.getdouble() 方法。当我运行程序时,我得到一个 id(13)。 email=c.getString(); 也出现了类似的问题。我不知道为什么。顺便说一句,我不知道我是否忽略了 c.getDouble() 给了我实际的 ID。 如果有人能告诉我为什么 getDouble() 或 getString() 不起作用,我们将不胜感激。 【参考方案1】:

我明白了:) 您必须添加 c.moveToFirst();两次,在两次初始化之后作为 2 个游标。 但我不明白为什么。谁能解释一下?

【讨论】:

以上是关于android电子邮件地址获取、存储和显示的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Android 用户的电子邮件地址?

mailto Intent 不显示收件人地址(Android 工作室)

Android Facebook通过访问令牌获取登录的电子邮件地址

很好地获取Android用户的电子邮件地址

如何在 Facebook Android sdk 4.0 中使用 Graph Request 获取登录用户的电子邮件地址

Android - 如何在 android 中检索 google plus circles 电子邮件地址?