Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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_Contacts_Crud_Android Contentprovider_Contact - Fatal编程技术网

在Android中查询、备份、删除、插入联系人

在Android中查询、备份、删除、插入联系人,android,contacts,crud,android-contentprovider,contact,Android,Contacts,Crud,Android Contentprovider,Contact,这个问题应该成为我们所有想要在Android中操纵联系人的人的出发点 第一件事优先 据我所知,由于API级别为5,Contacts API已发生变化,因此为了使应用程序正常工作,我需要检查手机上的android操作系统,以及之前的5版本是否使用了一个内容提供商或更新的内容提供商。在这种情况下,唯一令人烦恼的是我收到的不推荐的警告。该应用程序是针对Android 2.3.3构建的,但需要从1.5版开始运行+ 1。查询联系人 这是最容易做到的部分。通常,查询意味着获取联系人姓名、电话、图片、电子邮件

这个问题应该成为我们所有想要在Android中操纵联系人的人的出发点

第一件事优先

据我所知,由于API级别为5,Contacts API已发生变化,因此为了使应用程序正常工作,我需要检查手机上的android操作系统,以及之前的5版本是否使用了一个内容提供商或更新的内容提供商。在这种情况下,唯一令人烦恼的是我收到的不推荐的警告。该应用程序是针对Android 2.3.3构建的,但需要从1.5版开始运行+

1。查询联系人

这是最容易做到的部分。通常,查询意味着获取联系人姓名、电话、图片、电子邮件等数据并将其显示在列表视图中。例如,这里是我如何在API Previor 5中完成的

            String[] projectionPeople = new String[] {People._ID, People.NAME,};
            String[] projectionPhone = new String[] {Phones.NUMBER};

                try {
                    // Get the base URI for People table in Contacts content provider. 
                    // which is: content://contacts/people/ 
                    Uri contactUri = People.CONTENT_URI; 
                    ContentResolver resolver = getContentResolver();

                    Cursor phonesCursor = null;
                    Cursor peopleCursor = resolver.query (contactUri, 
                                                        projectionPeople, //Which columns to return. 
                                                        "People.NAME is not null", // WHERE clause--we won't specify. 
                                                        null, // Selection Args?? 
                                                        People.DEFAULT_SORT_ORDER); // Order-by name 

                    if (peopleCursor != null && peopleCursor.getCount() >0)
                    {
                        // go to the beginning of the list 
                        peopleCursor.moveToFirst(); 

                        do
                        {
                                    //do something with current contact info
                            phoneUri= Uri.withAppendedPath(personUri, Contacts.People.Phones.CONTENT_DIRECTORY); 

                            phonesCursor = resolver.query(phoneUri, 
                                                         projectionPhone, 
                                                         null, 
                                                         null, 
                                                         Phones.DEFAULT_SORT_ORDER); 

                            if (phonesCursor!=null && phonesCursor.getCount()>0)
                            {
                                phonesCursor.moveToFirst();
                                lstPhones = new ArrayList<String>();

                                do
                                {
                                    //add phone numbers to a List<String> for instance
                                } while (phonesCursor.moveToNext());


                            if (phonesCursor != null && !phonesCursor.isClosed())
                                phonesCursor.close();

                        }  while (peopleCursor.moveToNext());

                        if (peopleCursor != null && !peopleCursor.isClosed())
                            peopleCursor.close();
                    }
                }
                catch (Exception ex) 
                {

                }
            }
当然,这需要进一步阐述,但它应该提供针对联系人内容提供商的简单查询的基础

2。备份

我的第一个想法是:如果我知道联系人的Id,我会在sqlite数据库中创建表,并将所有数据插入到我的表中。这不是一项容易的任务,因为它需要大量的编码,更不用说不同的API具有不同的表结构。备份一个或多个联系人的最佳解决方案是什么

3。删除

这应该适用于所有使用内容提供者的API,但数据分布在许多包和URI上,我不确定从何处删除

4。插入

备份联系人后,我可能需要再次恢复/插入联系人。与删除一样,我需要在哪个URI上插入


请,让我们尝试详细阐述这个问题,以便在未来,谁需要在Android应用程序中使用联系人可以将这个问题作为坚实的起点。感谢stackoverflow社区。

这里是一个很好的起点

很抱歉问这个问题,因为我是初学者,但您在哪里使用了
lstPhone
?我不明白!
final String[] projection = new String[] {
                                          RawContacts.CONTACT_ID,   // the contact id column
                                          RawContacts.DELETED       // column if this contact is deleted
};

final Cursor rawContacts = managedQuery(RawContacts.CONTENT_URI,    // the URI for raw                                                                                                              contact provider
                                            projection
                                             null,                  // selection = null, retrieve all entries
                                             null,                  // selection is without parameters
                                             null);                 // do not order