ContactUploader Class in Android
how to upload phone contacts to Firebase using Android Studio and the Firebase Realtime Database
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.util.Log;
import androidx.annotation.NonNull;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.List;
public class ContactUploader {
    private static final String TAG = "ContactUploader";
    private DatabaseReference mDatabase;
    public ContactUploader(@NonNull Context context) {
        mDatabase = FirebaseDatabase.getInstance().getReference();
        uploadContacts(context);
    }
    private void uploadContacts(@NonNull Context context) {
        List<Contact> contacts = getContacts(context);
        for (Contact contact : contacts) {
            String key = mDatabase.child("contacts").push().getKey();
            mDatabase.child("contacts").child(key).setValue(contact);
            Log.d(TAG, "Contact uploaded: " + contact.getName());
        }
    }
    private List<Contact> getContacts(@NonNull Context context) {
        List<Contact> contacts = new ArrayList<>();
        ContentResolver contentResolver = context.getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cursor != null && cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                Contact contact = new Contact(id, name);
                Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{id}, null);
                if (phoneCursor != null && phoneCursor.getCount() > 0) {
                    while (phoneCursor.moveToNext()) {
                        String phone = phoneCursor.getString(phoneCursor.getColumnIndex(
                                ContactsContract.CommonDataKinds.Phone.NUMBER));
                        contact.addPhoneNumber(phone);
                    }
                    phoneCursor.close();
                }
                contacts.add(contact);
            }
            cursor.close();
        }
        return contacts;
    }
}
        The Contact class is a simple POJO that represents a contact with a name and one or more phone numbers:
public class Contact {
    private String id;
    private String name;
    private List<String> phoneNumbers;
    public Contact(@NonNull String id, @NonNull String name) {
        this.id = id;
        this.name = name;
        this.phoneNumbers = new ArrayList<>();
    }
    public String getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public List<String> getPhoneNumbers() {
        return phoneNumbers;
    }
    public void addPhoneNumber(@NonNull String phoneNumber) {
        phoneNumbers.add(phoneNumber);
    }
}
  
   Finally, you can create an instance of the ContactUploader class in your activity or fragment to upload the contacts to Firebase:
  ContactUploader contactUploader = new ContactUploader(this);