質問

私はAndroidが初めてです。だから私はあなたに私に忍耐強くなるように要求します。ボタンを押すと、連絡先APIが開かれたアプリケーションを作成しようとしています。次に、ユーザーが連絡先を選択します。その後、選択した連絡先を取得したいと思います onAcitvityResult(int reqcode, int rescode, Intent data). 。 URIを取得せずに、データベース全体を通してクエリをすることなくこれを行う方法はありますか?これは、2番目のアクティビティが開始される私のコードです。

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() 方法??
前もって感謝します。

役に立ちましたか?

解決

私はそれを手に入れました:)あなたはc.movetofirst()を追加する必要があります; 2回の初期化の後、2回のカーソルとして。しかし、私はその理由を得ていません。誰かがそれを説明できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top