How do i send contact numbers to the Firebase database?

İsa C. :

I have a code down there. I list the phone numbers in the directory with ArrayList and send it to the firebase database. I need to create a separate key for each phone number and name. But I failed. I write a database with the code as follows.

{
  "ContactPhoneNumbers" : {
    "-LcxMT5-D4KvWi3ZbFyi" : {
      "-LcxMT5-D4KvWi3ZbFyi" : {
        "name" : [ "ambulance", "police" ],
        "phone" : [ "112", "155" ]
      }
    }
  }
}

I will use this database later in an application. But it shouldn't be like this. I'm writing the database I want to create manually. It has to be like this.

{
  "ContactPhoneNumbers" : {
    "-LcaH_gtgarJwbY5-C08" : {
      "LcaH_gtgarAU54FU-C08" : {
        "name" : "police",
        "phone" : 155
      },
      "LcaH_gtgayuUU154TY" : {
        "name" : "ambulance",
        "phone" : 112
      }
    }
  }
}

I want to create a custom key for each phone number and name. Can I do this with my code below? I'd appreciate it if you could help.

Here is the UserPermissionActivity.

public class UserPermissionActivity extends AppCompatActivity {

    Cursor cursor;
    ArrayList<String> contacts,contacts2;

    private DatabaseReference mDatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_permission);

        FirebaseApp.initializeApp(this);
        mDatabase = FirebaseDatabase.getInstance().getReference();

        saveContacts();
     }

    private void saveContacts() {

        final String key =  mDatabase.push().getKey();

        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");

        contacts = new ArrayList<String>();
        contacts2 = new ArrayList<String>();

        while (cursor.moveToNext()){
            contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            contacts.add(contactName);
            contacts2.add(phoneNumber);

            mDatabase.child("ContactPhoneNumbers").child(key).child(key).child("name").setValue(contacts);
            mDatabase.child("ContactPhoneNumbers").child(key).child(key).child("phone").setValue(contacts2);
        }

        cursor.close();
    }
}
Reaz Murshed :

You need to have a class like the following.

public class User {

    public String name;
    public String phone;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }
}

Now you may consider declaring a function like the following.

private void writeNewUser(String name, String phone) {
    final String key =  mDatabase.push().getKey();
    User user = new User(name, phone);
    mDatabase.child("ContactPhoneNumbers").child(key).setValue(user);
}

Then call this function while you are saving your contacts.

private void saveContacts() {
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,
    ContactsContract.Contacts.DISPLAY_NAME + " ASC");

    while (cursor.moveToNext()){
        String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        // Call the function here
        writeNewUser(contactName, phoneNumber);
    }

    cursor.close();
}

Hope that solves your problem.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=157931&siteId=1