Android studio 如何在运行firebase查询后将电话联系人添加到sqlite数据
在检查firebase实时数据库中是否存在电话号码后,我想将所有电话联系人添加到SQLite数据库中,但我遇到了一些不适当的行为,例如同一联系人多次写入数据库,有时错误地输入数据库 这是密码Android studio 如何在运行firebase查询后将电话联系人添加到sqlite数据,android-studio,firebase-realtime-database,android-asynctask,cursor,android-sqlite,Android Studio,Firebase Realtime Database,Android Asynctask,Cursor,Android Sqlite,在检查firebase实时数据库中是否存在电话号码后,我想将所有电话联系人添加到SQLite数据库中,但我遇到了一些不适当的行为,例如同一联系人多次写入数据库,有时错误地输入数据库 这是密码 @SuppressLint("StaticFieldLeak") class AsyncTask extends android.os.AsyncTask<Void, Void, Void> { @Override protected
@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, null, 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, null, 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;
}
}
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, null, 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, null, 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);
}
}
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;
}
}