2011-01-04 9 views
0

私はアンドロイドを新しくしています。だから私はあなたが私に忍耐強くなるように頼みます。私は連絡先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_URI」と「Intent.ACTION_GET_CONTENT」を使用して修正するのですか?

私が使用しているのは正しいですか? 私はここにメールの詳細を含めるべきだと感じました。

私は活動の結果に対処するところである。 保護ボイドonActivityResult(INT requestCode、INT resultCodeが、インテントデータ){ super.onActivityResult(requestCode、resultCodeが、データ)。 文字列email = "";長いID。 場合(requestCodeは== 1){ (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"); 
} 

私は "失敗が結果を提供する" という実行時例外を取得しています。 いくつかのsetResult()メソッドを含めるべきですか? ありがとうございます。

+0

コード例は素晴らしいでしょう。 – Brahadeesh

+0

私は放送受信機を使用する必要がありますか?何か違いはありますか?どんな洞察にも感謝します。 – Brahadeesh

+0

私はデバッグを試みて問題を正確に突き止めました。これはこの行です: id = c.getDouble(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); – Brahadeesh

答えて

0

私はそれを持っています:) c.moveToFirst();を追加する必要があります。 2つのカーソルとしての2つの初期化の後、2回。 しかし、なぜ私は取得していません。それは誰でも説明できますか?

関連する問題