Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在复选框中显示联系人和电话号码_Android_Listview_Checkbox_Contactscontract - Fatal编程技术网

Android 在复选框中显示联系人和电话号码

Android 在复选框中显示联系人和电话号码,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

我希望以这种方式在复选框中显示联系人姓名及其电话号码:“联系人姓名:电话号码” 但是我在logcat
“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
    }
}