Android studio 如何在运行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

在检查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, 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;
    }
}