如何将联系电话发送到Firebase数据库?

时间:2019-04-21 01:12:33

标签: java android firebase-realtime-database

我那里有一个密码。我使用ArrayList在目录中列出电话号码,并将其发送到Firebase数据库。我需要为每个电话号码和姓名创建一个单独的密钥。但是我失败了。我用以下代码编写数据库。

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

稍后我将在应用程序中使用此数据库。但这不应该是这样。我正在编写要手动创建的数据库。一定是这样。

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

我想为每个电话号码和姓名创建一个自定义密钥。我可以使用下面的代码执行此操作吗?如果您能提供帮助,我将不胜感激。

这里是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();
    }
}

1 个答案:

答案 0 :(得分:0)

您需要有一个类似于以下的课程。

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;
    }
}

现在,您可以考虑声明如下函数。

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);
}

然后在保存联系人时调用此功能。

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();
}

希望能解决您的问题。