通过循环获取所有 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
将仅显示列表的最后一项。如果您只使用 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) {
}
});
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)+",");
}
你的所有号码都用这个显示
我有一个保存联系人的 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
将仅显示列表的最后一项。如果您只使用 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) {
}
});
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)+",");
}
你的所有号码都用这个显示