Отправка текстовых сообщений на номера, полученные из базы данных Firebase Realtime - PullRequest
0 голосов
/ 21 октября 2018

Я хочу отправить текстовые сообщения на номера, присутствующие в моей базе данных.Сообщения должны быть доставлены при нажатии на imageView.Следующий код внутри фрагмента называется Tab33.Я делюсь только методом onClick для ImageViews

 @Override
public void onClick(View view) {
    switch (view.getId()){

        case R.id.imageViewPayments:

            Boolean b = checkPermission();

            if(b==true) {
                DBRef.child("Members").addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        String phn = dataSnapshot.child("memberPhone").getValue(String.class);
                        String no = "+91 ";
                        String cat = no.concat(phn);
                        sms.sendTextMessage(cat, null, "Hey there! We know you enjoy Canteen Food but nobody likes to be in debt and that too for food. Please"  +
                                " pay your Canteen Bill to the earliest and stay a Happy Tummy!", null, null);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

                Toast.makeText(getContext(),"Message Sent Successfully",Toast.LENGTH_LONG).show();

            }else{
                Snackbar.make(getView(), "Permission to send message NOT granted!", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }

            return;

        case R.id.imageViewToday:





            return;

        case R.id.imageViewCoupon:



            return;

        case R.id.imageViewComposeMessage:
            Snackbar.make(getView(), "Compose Message!", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
            return;

    }

}

private boolean checkPermission()
{
    String permission = Manifest.permission.SEND_SMS;
    int res = getContext().checkCallingOrSelfPermission(permission);
    return (res == PackageManager.PERMISSION_GRANTED);
}

, где DBRef= FirebaseDatabase.getInstance().getReference(); и sms = SmsManager.getDefault();

Toast появляется, а затем приложение вылетает.

database

1 Ответ

0 голосов
/ 21 октября 2018

Когда вы загружаете узлы с ValueEventListener, снимок, который вы получаете в onDataChange, содержит все соответствующие дочерние узлы.Чтобы добраться до отдельных пользовательских узлов, вам необходимо выполнить цикл по dataSnapshot.getChildren().

Что-то вроде:

DBRef.child("Members").addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { 
      String phn = childSnapshot.child("memberPhone").getValue(String.class);
      System.out.println(phn)
    }
  }

  @Override
  public void onCancelled(@NonNull DatabaseError databaseError) {
    throw databaseError.toException(); // don't ignore errors!
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...