通过循环获取所有 firebase 数据

Getting all firebase data through loop

我有一个保存联系人的 firebase 数据库。我想获取所有联系人的号码并向他们发送一条消息。我读到它可以通过 for 循环来完成,但循环只 returns 最后插入的数字,而不是所有数字。这是下面的代码:

 dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            ArrayList<String> Userlist=new ArrayList<String>();

            for (DataSnapshot dsp : snapshot.getChildren())
               Userlist.add(String.valueof(dsp.getValue()));

           for(int i = 0; i<Userlist.size();i++)
{
show.setText(Userlist.get(i);
}
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

请告诉我一种方法,通过它我可以获取所有联系人的号码并给他们一个一个地发送消息。 发送消息的代码如下:

String phoneNumber="1234567890";

        String message="I need help";
        SmsManager smsManager=SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNumber,null,message,null,null);

我的数据库结构也附上了。请看看并指导我。我会感谢你的。

I have a firebase database where contacts are saved. I want to fetch all the numbers of contacts and send them message one by one. I read it could be done by a for loop but the loop only returns the last number inserted, not all the numbers.

问题是您试图通过循环将 ArrayList 项设置为 TextView

for(int i = 0; i<Userlist.size();i++){
    show.setText(Userlist.get(i);
}

通过循环将文本设置为 TextView 会随着循环的每一步更改 TextView 的文本,因此 TextView 将仅显示列表的最后一项。如果您只使用 ArrayListString 放入其中并设置 TextView (根据您的代码),使用 ArrayList 是没有用的。 在获取数据之前,在 onDataChange() 方法中创建一个空的 String,并在获取数据时用数据扩展 String。在 for 循环结束时 String 文本将包含所有数据,您可以将其设置为 TextView.

dbRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
         String text = "";
         for (DataSnapshot dsp : snapshot.getChildren()){
             Map<String, Object> datas = (Map<String, Object>) dsp.getValue();
             text += datas.get("number").toString() + "\n";
         }
         tv.setText(text);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
    }
});

Please tell me a method through which I can fetch all the numbers of contacts and send them message one by one.

您有 2 个选项来获取您的值。您可以使用 Map 或创建 Java Object.

使用地图:

private void sendMessage(DatabaseReference dbRef) {
        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                SmsManager smsManager= SmsManager.getDefault();
                for (DataSnapshot dsp: snapshot.getChildren()){
                    Map<String, Object> datas = (Map<String, Object>) dsp.getValue();
                    String phoneNumber = datas.get("number").toString();
                    String message="I need help";
                    smsManager.sendTextMessage(phoneNumber,null,message,null,null);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });
}

使用Java对象:

如果你想使用 Java Object,你需要创建 class,它有一个类似数据库结构的字段(字段必须与联系人子项一样)。

Users.class (Java Object):

public class Users {

    private String name, number, email;

    public Users() {
    }

    public Users(String name, String number, String email) {
        this.name = name;
        this.number = number;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

然后你可以把你的数据作为一个对象来获取。

private void sendMessage(DatabaseReference dbRef) {
        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                SmsManager smsManager= SmsManager.getDefault();
                for (DataSnapshot dsp: snapshot.getChildren()){
                    Users user = dsp.getValue(Users.class);
                    String phoneNumber = user.getNumber();
                    String message="I need help";
                    smsManager.sendTextMessage(phoneNumber,null,message,null,null);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });
}

两种sendMessage()方法都根据给定DatabaseReference从数据库中获取数据并使用您的代码发送消息。

试试这个

for(int i = 0; i<Userlist.size();i++)
     {
       show.append(userlist.get(i)+",");
        } 

你的所有号码都用这个显示