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

Posted

技术标签:

【中文标题】在复选框中显示联系人和电话号码【英文标题】:displaying Contact and Phone numbers in a check box 【发布时间】:2012-03-14 11:35:06 【问题描述】:

我尝试使用此代码在 listView 的复选框中显示电话号码:

@Override
protected void onCreate(Bundle savedInstanceState) 
   // TODO Auto-generated method stub
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main1);
   lv = (ListView) findViewById(R.id.contactList);

   Cursor numberCursor = null;
   Cursor peopleCursor = getContentResolver().query(ContactsContract
        .Contacts.CONTENT_URI,null,null
           ,null,null);  

   String [] nb = null ;
   String [] Tname = null;

   if(peopleCursor.getCount()>0)
     
       peopleCursor.moveToFirst();

       for(int i=0;i<peopleCursor.getCount();i++)
         
           //get number
           numberCursor=getContentResolver().query(ContactsContract
                .CommonDataKinds.Phone.CONTENT_URI, 
                new String[]ContactsContract.CommonDataKinds.Phone.NUMBER
                ,ContactsContract.CommonDataKinds.Phone._ID+"="+peopleCursor
                .getString(peopleCursor.getColumnIndex(ContactsContract.Contacts._ID)),  
                null,null);
           numberCursor.moveToFirst(); 

           String number=numberCursor.getString(numberCursor 
                  .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
           nb[i]=number;

           //get name
           String name=peopleCursor.getString(numberCursor
               .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
           Tname[i]=name;

           peopleCursor.moveToNext();                   
          

       SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,  
           R.layout.contact_entry, numberCursor,nb, 
           new int[] R.id.checkBox);

           lv.setAdapter(adapter);

    

 

但我在 logcat 中收到此错误,我不明白 --->

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0  

【问题讨论】:

【参考方案1】:

首先,我认为你应该在使用它们之前定义 nb 和 Tname 的大小:

      String[] Tname  = new String[peopleCursor.getCount()];

      String[] nb = new String[numberCursor.getCount()];

但我认为问题在于您的联系人列表中的每个人可能拥有一个或多个电话号码。 所以,peopleCursornumberCursor 应该有两个循环。并且您的索引(代码中的i)应仅用于数组Tname

【讨论】:

是的,我定义了 nb 和 Tname 的大小,但总是相同的错误---->“android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0”

以上是关于在复选框中显示联系人和电话号码的主要内容,如果未能解决你的问题,请参考以下文章

电话簿设置(即仅联系人过滤器)android 代码示例

Android:在 Contact Uri 列表中显示所有有电话号码的联系人详细信息

列数据 1 不存在.. 非法参数异常

多个联系人选取器列表

如何将联系人姓名、号码、contact_id 保存到 ArrayList / 联系人选择器

如何在android studio中显示按地址排序的联系人姓名和号码