如何使用Realm阅读Android中的联系人?

如何使用Realm阅读Android中的联系人?,第1张

概述我找不到任何解决方案来从Android读取联系人并将其保存在Realm中.以前有人这样做过吗?我知道我将不得不使用ContactsProvider,但这就是我所知道的.AFAIK,Realm不支持Cursor所以…还有什么?编辑:realm.executeTransaction(newRealm.Transaction(){@Overridep

我找不到任何解决方案来从Android读取联系人并将其保存在Realm中.以前有人这样做过吗?

我知道我将不得不使用Contacts ProvIDer,但这就是我所知道的. AFAIK,Realm不支持Cursor所以…还有什么?

编辑:

realm.executeTransaction(new Realm.Transaction() {        @OverrIDe        public voID execute(Realm realm) {            Contact realmContact = new Contact();            String filter = "" + ContactsContract.Contacts.HAS_PHONE_NUMBER + " > 0 and "                    + ContactsContract.CommonDataKinds.Phone.TYPE +"="                    + ContactsContract.CommonDataKinds.Phone.TYPE_MAIN;            Cursor phones = getActivity()                    .getContentResolver()                    .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, filter, null, null);            while (phones.movetoNext()) {                String ID = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));                String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.disPLAY_name));                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));                realmContact.setID(ID);                realmContact.setname(name);                realmContact.setNumber(phoneNumber);                realmContact.setIsBeingSaved(true);                realm.insertOrUpdate(realmContact);            }            /** merge mechanism */            realm.where(Contact.class)                    .equalTo("isBeingSaved", false)                    .findAll()                    .deleteallFromrealm(); // delete all non-saved data            for(Contact contact : realm.where(Contact.class).findAll()) {                realmContact.setIsBeingSaved(false); // reset all save state            }

Contact.class

public class Contact extends RealmObject{@PrimaryKeyprivate String ID;@Indexprivate String name;@Indexprivate String number;@Indexprivate boolean isBeingSaved;public String getID() {    return ID;}public voID setID(String ID) {    this.ID = ID;}public String getname() {    return name;}public voID setname(String name) {    this.name = name;}public String getNumber() {    return number;}public voID setNumber(String number) {    this.number = number;}public boolean getIsBeingSaved() {    return isBeingSaved;}public voID setIsBeingSaved(boolean beingSaved) {    isBeingSaved = beingSaved;}

}

解决方法:

创建RealmObject,从内容提供者读取数据,将数据保存到RealmObject,在Realm中保存数据:

// background threadRealm realm = null;try {    realm = Realm.getDefaultInstance();    realm.executeTransaction(new Realm.Transaction() {        @OverrIDe        public voID execute(Realm realm) {            RealmContact realmContact = new RealmContact();            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);            while (phones.movetoNext()) {               String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.disPLAY_name));               String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));               realmContact.setname(name);               realmContact.setPhoneNumber(phoneNumber);               realm.insertOrUpdate(realmContact);            }        }    });} finally {    if(realm != null) {        realm.close();    }}

编辑:好的,这是一个合并数据和删除所有不在列表中的数据的技巧

public class RealmContract extends RealmObject {    @PrimaryKey    private long ID;    @Index    private String name;    @Index    private String phoneNumber;    @Index    private boolean isBeingSaved;    //getters, setters}

然后合并:

// background threadRealm realm = null;try {    realm = Realm.getDefaultInstance();    realm.executeTransaction(new Realm.Transaction() {        @OverrIDe        public voID execute(Realm realm) {            RealmContact realmContact = new RealmContact();            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);            while (phones.movetoNext()) {               String ID = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds._ID));               String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.disPLAY_name));               String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));               realmContact.setID(ID);               realmContact.setname(name);               realmContact.setPhoneNumber(phoneNumber);               realmContact.setIsBeingSaved(true);               realm.insertOrUpdate(realmContact);            }            realm.where(RealmContact.class)                 .equalTo(RealmContactFIElds.IS_BEING_SAVED, false) // compile 'dk.ilios:realmfIEldnameshelper:1.0.0'                 .findAll()                 .deleteallFromrealm(); // delete all non-saved data            for(RealmContact realmContact : realm.where(RealmContact.class).findAll()) { // realm 0.89.0+                realmContact.setIsBeingSaved(false); // reset all save state            }        }    });} finally {    if(realm != null) {        realm.close();    }}

编辑:请参阅OP的其他问题,以便可靠地读取联系人数据(因为有一些联系人LOOKUP_ID,并确保ID正确):Obtaining contacts from content provider without duplicates or invalid contacts, and save to Realm

总结

以上是内存溢出为你收集整理的如何使用Realm阅读Android中的联系人?全部内容,希望文章能够帮你解决如何使用Realm阅读Android中的联系人?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存