Чтение общих контактов из базы данных Firebase и телефонной книги - PullRequest
0 голосов
/ 27 июня 2019

Структура базы данных 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);
    }

}

}

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Попробуй вот так -

reference = 

FirebaseDatabase.getInstance().getReference("Pets").child(fireba 
  setUser.getUid());
     reference.addValueEventListener(new ValueEventListener() {
             @Override
            public void onDataChange(@NonNull DataSnapshot 
dataSnapshot) {
                for (DataSnapshot childSnapshot : 
dataSnapshot.getChildren())
            {
                String key = childSnapshot.getKey();


                }


          @Override
           public void onCancelled(@NonNull DatabaseError 
   databaseError) {
            Log.wtf(TAG, "onCancelled: 펫이미지 가져오는데 문제 발생! 
    ");  
        }
    });
0 голосов
/ 27 июня 2019

Измените это:

            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) {

                }
            });

на это:

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

                }
            });

Добавьте ссылку на узел users, затем выполните итерации внутри userid и получите значение phone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...