2012-03-04 3 views
-1

コンテンツプロバイダを通じて、電話連絡先を取得してリスト形式で表示するコードを取得しました。 最初のアクティビティからリスト形式の連絡先をクリックすると、次のアクティビティで特定の人物の電話番号と名前を表示します。私はクリック操作を実行することができないし、次の活動にそれを表示することができないので、このエラーを取得していますこれで私を助けてください。リストビューで連絡先を取得し、次のアクティビティでクリックアクションで電話番号を表示

私はコンテンツプロバイダを通じてコン​​タクトを表示しています。ここで

import android.app.Activity; 

import android.app.ListActivity; 

import android.content.Intent; 

import android.database.Cursor; 

import android.net.Uri; 

import android.os.Bundle; 

import android.provider.ContactsContract; 

import android.view.View; 

import android.widget.AdapterView; 

import android.widget.AdapterView.OnItemClickListener; 

import android.widget.ListView; 

import android.widget.SimpleCursorAdapter; 

import android.widget.TextView; 



public class MsatActivity extends ListActivity 

{ 

TextView ContactsTV; 

ListView lv; 

Cursor c; 

public static final Uri CONTENT_URI = 

Uri.parse("content://com.android.contacts/contacts/1557"); 


public void onListItemClick(View v) 

{ 

    Intent outData = new Intent(this,Full.class); 

// setResult(Activity.RESULT_OK, outData); 

    startActivity(outData); 

} 

    public void onCreate(Bundle savedInstanceState) 

    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     Uri myContacts = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;   

     c = getContentResolver().query(myContacts, new String[] 

     {ContactsContract.CommonDataKinds.Phone._ID, 

     ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 

     ContactsContract.CommonDataKinds.Phone.NUMBER}  

     , null, null, null); 


     String[] columns = new String[]         

       { 

       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 

       ContactsContract.CommonDataKinds.Phone.NUMBER};   

      int[] to = new int[] {R.id.text1,R.id.text2}; 



      SimpleCursorAdapter mAdapter = new 

SimpleCursorAdapter(this,R.layout.listitems, c, columns, to); 

      setListAdapter(mAdapter); 

      lv.setOnItemSelectedListener(new OnItemClickListener() 

      { 



public void onItemClick(AdapterView<?> parent, View view, int pos, long id) 

{ 

int rowId = c.getInt(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone._ID)); 

Uri outURI = Uri.parse(CONTENT_URI.toString() + "/" + rowId); 

Intent outData = new Intent(); 

outData.setData(outURI); 

setResult(Activity.RESULT_OK, outData); 

finish(); 

} 

      }); 

    } 

    } 

は、第二の活動です.......

import android.app.Activity; 

import android.content.Intent; 

import android.database.Cursor; 

import android.net.Uri; 

import android.os.Bundle; 

import android.provider.ContactsContract; 

import android.view.View; 

import android.widget.Button; 



public class Full extends Activity 

{ 



    private static final int CONTACT_PICKER_RESULT = 1001; 

    String name; 

    Cursor cursor; 

    /** Called when the activity is first created. */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) 

    { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main1); 

     Button getContacts = (Button)findViewById(R.id.button1); 

     getContacts.setOnItemClickListener(new View.OnItemClickListener() 

     { 



      public void onClick(View v) 

      { 

       Intent i = new Intent(Intent.ACTION_PICK, 

         ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 

       startActivityForResult(i, CONTACT_PICKER_RESULT); 



      } 

     }); 

    } 

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

     if (resultCode == RESULT_OK) 

     { 

      switch (requestCode) 

      { 

      case CONTACT_PICKER_RESULT: 





       try { 

        Uri result = data.getData(); 

        String id = result.getLastPathSegment(); 



        //Get Name 

        cursor = getContentResolver().query(result, null, null, null, null); 

        if (cursor.moveToFirst()) 

        { 

         name = 
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

        } 

       } 

        catch (Exception e) 

        { 



        } 

      } 

     } 

    } 

} 

答えて

0

私は本当にすべてであなたのコードを把握することはできません。最初のアクティビティは、フルアクティビティを開始するインテントを作成しているようですが、2つの「onclick」メソッドがあり、getIntent()を実行したことがないのにsetResult()およびfinish()を行います。

2番目のアクティビティは、Phoneテーブル全体に対してACTION_PICKインテントを作成し、その結果をクエリすることによってリターンを処理します。これは、ユーザーがピックした連絡先の連絡先IDでなければなりません。私はそれがURI全体だとは思わない。デバッグでそれを確認する必要があります。この連絡先のDISPLAY_NAMEを取得しようとします。

申し訳ありませんが、最初のアクティビティが必要な理由はわかりません。

連絡先プロバイダをStackoverflowのどこか他の場所で使用する方法について説明しました。 androidとContactsContractを検索するだけです。

関連する問題