Структура базы данных Firebase
Я создаю приложение для отслеживания, в котором пользователь может выбрать из своей телефонной книги подписчика, который затем сможет отслеживать свое путешествие. Чтобы реализовать это, я (пользователь) должен получить доступ к своей телефонной книге и выбрать контакты, которых он хотел бы отправить. последующий запрос. Для этого я хочу, чтобы мое приложение показывало только контакты, у которых установлено приложение. Я создал пользовательский класс для хранения сведений о пользователях в базе данных Firebase. Я могу получить доступ к контактам из моей телефонной книги. Кроме того, я могу хранить информацию о людях, которые используют мое приложение, в базе данных Firebase. Когда я пытаюсь получить телефонные номера пользователей из базы данных Firebase, это не дает мне ожидаемого результата. Может ли кто-нибудь помочь мне в этом отношении?
Я создал основное действие, в котором есть база данных Firebase. Когда новый пользователь регистрируется, его данные вводятся в базу данных Firebase. Структура моей базы выглядит следующим образом:
contactsfirebase-16ade
users
-LiNCTO6eR2TVmKmJXLE
email: "kira_6809@yahoo.com"
name: "kiran"
phone: "1234567890"
В следующем упражнении для пробной версии я добавил кнопку и ListView, чтобы при нажатии на кнопку я мог видеть все сведения о пользователях, присутствующих в базе данных firebase. код, который я использую для всего этого.
MainActivity:
EditText Name,Email,Phone;
Button Submit,Load;
DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name= findViewById(R.id.Name);
Email= findViewById(R.id.Email);
Phone= findViewById(R.id.Phone);
Submit= findViewById(R.id.Submit);
Load= findViewById(R.id.Next);
databaseReference=
FirebaseDatabase.getInstance().getReference("users");
Submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AddUser();
}
});
Load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this,ShowFirebase.class));
}
});
}
private void AddUser() {
String name = Name.getText().toString().trim();
String email = Email.getText().toString().trim();
String phone = Phone.getText().toString();
User user = new User(name,email,phone);
String id = databaseReference.push().getKey();
if((!name.isEmpty())&&(!email.isEmpty())&&(!phone.isEmpty())){
databaseReference.child(id).setValue(user);
Toast.makeText(this,"Registered successfully",Toast.LENGTH_LONG).show();
startActivity(new Intent(MainActivity.this,ShowFirebase.class));
}else{
Toast.makeText(this,"Retry",Toast.LENGTH_LONG).show();
}
}
}
ShowFirebaseActivity:
public class ShowFirebase extends AppCompatActivity {
ListView ListView;
Button Load;
DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_firebase);
ListView = findViewById(R.id.ListView);
Load = findViewById(R.id.Next);
databaseReference =
FirebaseDatabase.getInstance().getReference();
DatabaseReference phoneref = databaseReference.child("phone");
//String id = databaseReference.getKey();
Load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
databaseReference.child("users");
databaseReference.child("id");
databaseReference.child("phone");
databaseReference.addValueEventListener(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ArrayList<String> numbers = new ArrayList<>();
for (DataSnapshot ds :
dataSnapshot.getChildren()) {
String number = ds.getKey();
numbers.add(number);
}
ArrayAdapter stringArrayAdapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,numbers);
ListView.setAdapter(stringArrayAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
}
}
Класс пользователя:
public class User {
String Name,Email,Phone;
public User(String name, String email, String phone) {
Name = name;
Email = email;
Phone = phone;
}
public String getName() {
return Name;
}
public String getEmail() {
return Email;
}
public String getPhone() {
return Phone;
}
}
Нет ошибки в коде как таковом, но когда мы нажимаем кнопку в действии ShowFirebase, единственное, что появляется, - это текст «пользователи». Я ожидаю увидеть все телефонные номера в базе данных Firebase.
Отредактировано:
public class ShowFirebase extends AppCompatActivity {
ListView ListView;
Button Load;
String phoneNumber;
String name;
DatabaseReference databaseReference;
ArrayList<String> aa = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_firebase);
GetNumber(this.getContentResolver());
ListView = findViewById(R.id.ListView);
Load = findViewById(R.id.Next);
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference = FirebaseDatabase.getInstance().getReference().child("users");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ArrayList<String> numbers = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String number = ds.child("phone").getValue(String.class);
String name = ds.child("name").getValue(String.class);
numbers.add(number);
}
numbers.retainAll(aa);
ArrayAdapter stringArrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, numbers);
ListView.setAdapter(stringArrayAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void GetNumber(ContentResolver contentResolver) {
Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.Contacts.SORT_KEY_PRIMARY + " ASC");
while (phones.moveToNext()) {
name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println("......." + phoneNumber);
aa.add(name + " " + phoneNumber);
}
}
}