Android 在复选框中显示联系人和电话号码
我希望以这种方式在复选框中显示联系人姓名及其电话号码:“联系人姓名:电话号码” 但是我在logcatAndroid 在复选框中显示联系人和电话号码,android,listview,checkbox,contactscontract,Android,Listview,Checkbox,Contactscontract,我希望以这种方式在复选框中显示联系人姓名及其电话号码:“联系人姓名:电话号码” 但是我在logcat“java.lang.IllegalArgumentException:Invalid column data1”中发现了这个错误 以下是我使用的代码------> 包wael.ilahi.pfe; 导入java.util.ArrayList; 导入java.util.HashMap; 导入java.util.zip.Inflater; 导入android.app.Activity; 导入andr
“java.lang.IllegalArgumentException:Invalid column data1”中发现了这个错误
以下是我使用的代码------>
包wael.ilahi.pfe;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.zip.Inflater;
导入android.app.Activity;
导入android.app.ListActivity;
导入android.content.Intent;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.contacts合同;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.view.Window;
导入android.view.WindowManager;
导入android.widget.AdapterView;
...
公共类SelectFriends扩展活动实现OnClickListener{
公共静态最终字符串标记=“ContactManager”;
私人按钮保存;
私有ListView lv;
私有布尔值不可见;
复选框ch;
字符串s;
int k=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
Log.v(标记“活动状态:onCreate()”);
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
bSave=(按钮)findViewById(R.id.addContactButton);
lv=(ListView)findViewById(R.id.contactList);
populateContactList();
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、最终视图
内部位置,长id){
ch=(复选框)view.findviewbyd(R.id.CheckBox);
ch.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
//TODO自动生成的方法存根
Toast.makeText(getApplicationContext(),
“单击列表项目编号”+位置,Toast.LENGTH_LONG).show();
}
});
}
});
bSave.setOnClickListener(这个);
}
私有void populateContactList(){
//使用联系人条目生成适配器
Cursor=getContacts();
字符串[]字段=新字符串[]{
ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME+“:”+
ContactsContract.CommonDataTypes.Phone.NUMBER};
SimpleCrsorAdapter=新的SimpleCrsorAdapter(此,
R.layout.contact_条目、光标、字段、新int[]{R.id.checkBox});
低压设置适配器(适配器);
}
私有游标getContacts(){
//运行查询
Uri=Contacts contract.Contacts.CONTENT\u Uri;
字符串[]投影=新字符串[]{
//Contacts contract.Contacts.DISPLAY\u NAME,
ContactsContract.CommonDataTypes.Phone.NUMBER};
字符串选择=null;
字符串[]selectionArgs=null;
字符串排序器=null;
返回managedQuery(uri、投影、选择、selectionArgs、排序器);
}
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
}
}
看起来您正在尝试查询联系人表并从中返回电话号码
不幸的是,联系人提供者不是这样工作的。总之:
Contacts提供程序有三个表:Contacts、RawContacts和Data。每个联系人行
指向一个或多个行。每个RawContact行指向一个或多个数据行
联系人作为原始联系人存储在联系人提供程序中。提供者自己创建
联系其他行。将自动选择一个原始联系人姓名作为联系人行的显示\u name\u PRIMARY
数据表包含原始联系人的详细信息。这些行是通用的。它们中的每一个都有相同的列名,您可以在contacts contract.Data中看到。要选择特定类型的详细信息,例如电话号码,您必须搜索MIME类型为ContactsContract.CommonDataTypes.phone.CONTENT\u ITEM\u type的数据行。然后,您可以将该行中的电话号码称为
Contacts contract.CommonDataTypes.Phone.Phone\u号码;该常数的值为
“数据1”。也就是说,CommonDataTypes类中的常量是列名的别名
在contacts contract.Data中定义了DATA1-DATA15。别名使理解数据行的语义变得更容易
有一种简单的方法可以实现您的目标:使用Contacts contract.Contacts.Entity构造。这将返回一个游标,其中包含联系人的所有数据和联系人行。如果将选择参数设置为ContactsContract.Data.MIME\u TYPE=ContactsContract.CommonDataTypes.Phone.CONTENT\u ITEM\u TYPE,则只能检索电话号码
注意:原始联系人的显示名称存储在数据表中,作为
ContactsContract.CommonDataTypes.StructuredName行 将完整的StackTrace添加到您的问题中。我刚刚尝试使用此代码在列表视图中的复选框中显示电话号码
package wael.ilahi.pfe;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.zip.Inflater;
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.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
...
public class SelectFriends extends Activity implements OnClickListener {
public static final String TAG = "ContactManager";
private Button bSave;
private ListView lv;
private boolean mShowInvisible;
CheckBox ch;
String s;
int k=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.v(TAG, "Activity State: onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
bSave = (Button) findViewById(R.id.addContactButton);
lv = (ListView) findViewById(R.id.contactList);
populateContactList();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,final
int position, long id) {
ch = (CheckBox) view.findViewById(R.id.checkBox);
ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"Click ListItem Number " + position, Toast.LENGTH_LONG).show();
}
});
}
});
bSave.setOnClickListener(this);
}
private void populateContactList() {
// Build adapter with contact entries
Cursor cursor = getContacts();
String[] fields = new String[] {
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +":"+
ContactsContract.CommonDataKinds.Phone.NUMBER};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.contact_entry, cursor,fields, new int[] {R.id.checkBox});
lv.setAdapter(adapter);
}
private Cursor getContacts(){
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
//ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
String selection = null;
String[] selectionArgs = null;
String sortOrder =null;
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}