编写一个程序,联系人数据库会对联系人的资料模块化,分成多个表保存数据,表与表之间使用id相关联。根据不同的Uri获取联系人表中的相关信息如下所示: (1)通过ContactsContract.Contacts.CONTENT_URI的Uri获取Contacts表中的联系人id和姓名,其字段分别为ContactsContract.Contacts._ID、ContactsContract.Contacts.DISPLAY_NAME。 (2)通过ContactsContract.CommonDataKindsPhone.CONTENT URI的Uri获取Data表中的联系人id和电话,其字段分别为ContactsContract.CommonDataKinds.Phone.CONTACT_ID、ContactsContract.CommonDataKinds.Phone.NUMBER 请根据上述系统联系人数据库的相关信息,编写一个程序,用于读取系统联系人的姓名和电话,并将读取的信息显示在界面中。
时间: 2023-06-18 17:06:04 浏览: 1413
请参考以下代码:
```java
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class ContactActivity extends Activity {
private ListView contactsListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
contactsListView = findViewById(R.id.contacts_list_view);
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
projection,
null,
null,
null);
String[] fromColumns = new String[] {
ContactsContract.Contacts.DISPLAY_NAME
};
int[] toViews = new int[] {
android.R.id.text1
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
cursor,
fromColumns,
toViews,
0);
contactsListView.setAdapter(adapter);
}
}
```
上述代码实现了读取系统联系人的姓名,并将其显示在界面中。要同时显示联系人的电话,我们需要在查询Contacts表时获取联系人的id,并在查询Data表时根据联系人id获取相应的电话信息。代码如下:
```java
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class ContactActivity extends Activity {
private ListView contactsListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
contactsListView = findViewById(R.id.contacts_list_view);
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
projection,
null,
null,
null);
String[] fromColumns = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
int[] toViews = new int[] {
android.R.id.text1,
android.R.id.text2
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_2,
cursor,
fromColumns,
toViews,
0);
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(android.view.View view, Cursor cursor, int columnIndex) {
if (columnIndex == cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) {
String phoneNumber = cursor.getString(columnIndex);
((android.widget.TextView) view).setText(phoneNumber);
return true;
}
return false;
}
});
contactsListView.setAdapter(adapter);
}
}
```
上述代码中,我们使用了SimpleCursorAdapter来将数据显示在ListView中。同时,我们还实现了ViewBinder接口,用于在显示电话信息时将其绑定到正确的TextView上。
阅读全文