【问题标题】:Android populating contacts on listview only working on phones above gingerbreadAndroid 在 listview 上填充联系人仅适用于姜饼上方的手机
【发布时间】:2013-06-18 08:35:46
【问题描述】:

android 在 listview 上填充联系人仅适用于姜饼上方的手机
以下代码用于在列表视图中加载联系人

dialog = new Dialog( AddNewFriend.this);
         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
         dialog.setContentView(R.layout.contact_view);
         dialog.show();
        final ListView lv=(ListView) dialog.findViewById(R.id.lv_contacts);
        final EditText et_search=(EditText) dialog.findViewById(R.id.et_search);
         String  contact="";
            int i;

            ContentResolver cr= getContentResolver();
            Cursor c1=cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
          //  Toast.makeText(c, c1.getCount()+"", Toast.LENGTH_LONG).show();
            if(c1.getCount()>0)
            {
                displ=new String[c1.getCount()];
                displ2=new String[c1.getCount()];
                c_name=new String[c1.getCount()];
                c_no=new String[c1.getCount()];
                 i=0;

            while(c1.moveToNext())
            {
                String id=c1.getString(c1.getColumnIndex(ContactsContract.Contacts._ID));
                c_name[i]=c1.getString(c1.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if(Integer.parseInt(c1.getString(c1.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0)
                {
                    Cursor c2=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",new String[] {id}, null);
                    c2.moveToFirst();
                    c_no[i]=c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                }
                    if(c_no[i]==null)
                    contact=String.format(c_name[i]+"\n");
                    if(c_name[i]==null)
                        contact=String.format(" \n"+c_no[i]);
                    else
                    contact=String.format(c_name[i]+"\n"+c_no[i]);
                    displ[i]=contact;
                    i++;
            }

          //  displ2=displ;
            for(int k=0;k<displ.length;k++)
            {
                displ2[k]=displ[k]; 
            }
            adpt=new ArrayAdapter<String>( AddNewFriend.this, android.R.layout.simple_list_item_1,displ2);
            lv.setAdapter(adpt); 
            }

在 android 2.3 以上操作系统的手机上可以正常工作,有人可以帮忙吗? 它在 log cat 上引发 nullPointer 异常

【问题讨论】:

  • 您在
  • 在我尝试的每个版本
  • 查询返回的光标有问题。在每个 android 平台中,联系人都有不同的表结构。所以你需要知道所有表的结构并在代码中处理它。针对不同的平台进行了不同的查询。
  • 能否请您上传查询的示例代码。这将非常有帮助。

标签: android android-contacts


【解决方案1】:

添加支持的库并使用托管查询更多地列出您的联系人。 此光标将由 Android 管理,因此您无需关闭它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多