У меня там есть код. Я перечисляю номера телефонов в каталоге с 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();
}
Надеюсь, что это решит вашу проблему.