如何解决运行 firebase 查询后如何将电话联系人添加到 sqlite 数据
在检查 Firebase 实时数据库中是否存在该号码后,我想将所有电话联系人添加到 SQLite 数据库中,但我正面临一些不适当的行为,例如有时同一联系人写入数据库多次,有时错误地进入数据库
这是代码
@SuppressLint("StaticFieldLeak")
class AsyncTask extends android.os.AsyncTask<Void,Void,Void> {
@Override
protected Void doInBackground(Void... voids) {
PhoneContactModel phoneContactModel = new PhoneContactModel();
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
SharedPreferences.Editor editor = getSharedPreferences("Preference",MODE_PRIVATE).edit();
int count = cursor.getCount();
editor.putInt("ContactCounts",count);
editor.apply();
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
phoneContactModel.setContactId(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)));
phoneContactModel.setDisplayName(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
phoneContactModel.setContactImageUrl(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)));
Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",new String[]{cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))},null);
if (phoneCursor.getCount() > 0) {
while (phoneCursor.moveToNext()) {
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phoneContactModel.setPhoneNumber(phoneNumber);
FirebaseDatabase.getInstance().getReference()
.child("Users")
.orderByChild("phoneNumber").equalTo(phoneNumber)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
phoneContactModel.setIsUserAlreadyExists("Message");
phoneContactModel.setUserId(String.valueOf(snapshot.getValue()));
} else {
phoneContactModel.setIsUserAlreadyExists("Invite");
phoneContactModel.setUserId("user not register yet");
}
sqLiteOpenHelper.insertContact(phoneContactModel);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
phoneCursor.close();
}
}
}
cursor.close();
return null;
}
}
这是我的 SqliteHelperClass
public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "DirectDB";
private static final String TABLE_NAME = "Contacts";
private static final String KEY_NAME = "Name";
private static final String KEY_NUMBER = "Number";
private static final String KEY_IS_USER_ALREADY_EXISTS = "IsUserAlreadyExists";
private static final String KEY_USER_ID = "userId";
private static final String KEY_IMAGE_URL = "ProfileImageUrl";
public SQLiteOpenHelper(Context context) {
super(context,DATABASE_NAME,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATION_TABLE = "CREATE TABLE Contacts ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Number TEXT,ProfileImageUrl TEXT,IsUserAlreadyExists TEXT,userId TEXT)";
db.execSQL(CREATION_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}
public void insertContact(PhoneContactModel phoneContactModel) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME,phoneContactModel.getDisplayName());
values.put(KEY_NUMBER,phoneContactModel.getPhoneNumber());
values.put(KEY_IMAGE_URL,phoneContactModel.getContactImageUrl());
values.put(KEY_IS_USER_ALREADY_EXISTS,phoneContactModel.getIsUserAlreadyExists());
values.put(KEY_USER_ID,phoneContactModel.getUserId());
db.insert(TABLE_NAME,values);
db.close();
}
public List<PhoneContactModel> allContacts() {
List<PhoneContactModel> contactModelList = new ArrayList<>();
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query,null);
PhoneContactModel phoneContactModel;
if (cursor.moveToFirst()) {
do {
phoneContactModel = new PhoneContactModel();
phoneContactModel.setContactId(cursor.getString(0));
phoneContactModel.setDisplayName(cursor.getString(1));
phoneContactModel.setPhoneNumber(cursor.getString(2));
phoneContactModel.setContactImageUrl(cursor.getString(3));
phoneContactModel.setIsUserAlreadyExists(cursor.getString(4));
phoneContactModel.setUserId(cursor.getString(5));
contactModelList.add(phoneContactModel);
} while (cursor.moveToNext());
}
cursor.close();
return contactModelList;
}
public void deleteTableData(SQLiteDatabase database) {
database.execSQL("delete from " + TABLE_NAME);
}
}
这是 ContactModelClass
public class PhoneContactModel {
private String contactId,displayName,phoneNumber,ContactImageUrl,isUserAlreadyExists,UserId;
public PhoneContactModel() {
}
public PhoneContactModel(String contactId,String displayName,String phoneNumber,String contactImageUrl,String isUserAlreadyExists,String userId) {
this.contactId = contactId;
this.displayName = displayName;
this.phoneNumber = phoneNumber;
ContactImageUrl = contactImageUrl;
this.isUserAlreadyExists = isUserAlreadyExists;
UserId = userId;
}
public String getContactId() {
return contactId;
}
public void setContactId(String contactId) {
this.contactId = contactId;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getContactImageUrl() {
return ContactImageUrl;
}
public void setContactImageUrl(String contactImageUrl) {
ContactImageUrl = contactImageUrl;
}
public String getIsUserAlreadyExists() {
return isUserAlreadyExists;
}
public void setIsUserAlreadyExists(String isUserAlreadyExists) {
this.isUserAlreadyExists = isUserAlreadyExists;
}
public String getUserId() {
return UserId;
}
public void setUserId(String userId) {
UserId = userId;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。