检索特定联系人的生日

时间:2017-06-01 04:04:30

标签: android listview textview

从联系人中检索联系人列表并显示在listView中。当从列表视图中单击一个联系人时,它会启动一个新活动,即DetailActivity.java(下面提供的代码)。我需要在DetailActivity的TextView字段中显示点击的联系人生日。怎么做?

MainActivity.java

public class MainActivity extends AppCompatActivity {

    ListView listView1 ;
    ArrayList<String> nameArray, phoneArray;
    ArrayAdapter<String> arrayAdapter;
    Cursor cursor, birthdayCur ;
    String name, birthday ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main1);

        listView1 = (ListView)findViewById(listView);

        nameArray = new ArrayList<String>();

        GetContactsIntoArrayList();

        arrayAdapter = new ArrayAdapter<String>(
                MainActivity.this,
                R.layout.contact_items,
                textView, nameArray
        );

        listView1.setAdapter(arrayAdapter);

        listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {

                String data = (String) adapter.getItemAtPosition(position);
                Intent appInfo = new Intent(MainActivity.this, DetailActivity.class);
                appInfo.putExtra("data", data);
                startActivity(appInfo);

            }
        });
}

public void GetContactsIntoArrayList(){

        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null);

        while (cursor.moveToNext()) {

            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            nameArray.add(name);

        }

        cursor.close();

        String where = ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;

        birthdayCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, where, null, null);
        if (birthdayCur.getCount() > 0) {
            while (birthdayCur.moveToNext()) {
                birthday = birthdayCur.getString(birthdayCur.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
                phoneArray.add(birthday);
            }

        }
        birthdayCur.close();

    }

DetailActivity.java

public class DetailActivity extends AppCompatActivity {

    TextView tv1, tv2;
    String data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        Intent i = getIntent();

        data = i.getStringExtra("data");

        tv1 = (TextView) findViewById(R.id.name);
        tv1.setText(data);


    }

1 个答案:

答案 0 :(得分:0)

你可以获得联系人的生日日期,试试这个:

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0) {
    while (cur.moveToNext()) {
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        ContentResolver bd = getContentResolver();
        Cursor bdc = bd.query(android.provider.ContactsContract.Data.CONTENT_URI, new String[] { Event.DATA }, android.provider.ContactsContract.Data.CONTACT_ID+" = "+id+" AND "+Data.MIMETYPE+" = '"+Event.CONTENT_ITEM_TYPE+"' AND "+Event.TYPE+" = "+Event.TYPE_BIRTHDAY, null, android.provider.ContactsContract.Data.DISPLAY_NAME);
        if (bdc.getCount() > 0) {
            while (bdc.moveToNext()) {
                String birthday = bdc.getString(0);
                // now "id" is the user's unique ID, "name" is his full name and "birthday" is the date and time of his birth
            }
        }
    }
}
cur.close();