我有一个保存联系人的 firebase 数据库。我想取
所有联系人的号码并一一发送消息。我读
它可以通过 for 循环完成,但循环只返回最后一个
插入的数字,而不是所有的数字。
问题是您尝试使用循环将 ArrayList 项目设置为 TextView。
for(int i = 0; i<Userlist.size();i++){
show.setText(Userlist.get(i);
}
使用循环将文本设置为TextView 会随着循环的每一步更改TextView 的文本,因此TextView 将仅显示列表的最后一项。如果您只使用ArrayList 将String 放入其中并设置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) {
}
});
请告诉我一个方法,我可以通过它获取所有的数字
联系人并一一发送消息。
您有 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,你需要创建一个类,它有一个像数据库结构这样的字段(字段必须和联系人子一样)。
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 从数据库中获取数据,并使用您的代码发送消息。