繁体   English   中英

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

[英]How do i send contact numbers to the Firebase 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();
    }
}

你需要有一个像下面这样的类。

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

希望能解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM