Java 如何从Firebase获得孩子?
我想从Posts->Firebase的所有“id”中获取数据,也就是说,这行就是我要获取的。我的代码只从最后一个id获取最后一个日期 如果当前日期和日期与从Firebase收到的日期匹配,则程序将删除idJava 如何从Firebase获得孩子?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想从Posts->Firebase的所有“id”中获取数据,也就是说,这行就是我要获取的。我的代码只从最后一个id获取最后一个日期 如果当前日期和日期与从Firebase收到的日期匹配,则程序将删除id package com.aak.dayworkkz.Activities.ui.slideshow; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import
package com.aak.dayworkkz.Activities.ui.slideshow;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProviders;
import com.aak.dayworkkz.Models.Post;
import com.aak.dayworkkz.R;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class SlideshowFragment extends Fragment {
private SlideshowViewModel slideshowViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
slideshowViewModel =
ViewModelProviders.of(this).get(SlideshowViewModel.class);
final View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
**final DatabaseReference database = FirebaseDatabase.getInstance().getReference().child("Posts");
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String date = dataSnapshot1.child("date").getValue().toString();
TextView textView = root.findViewById(R.id.dateText);
textView.setText(date + " its work");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});**
return root;
}
}
代码中的问题在于每次迭代都在
文本视图上设置日期,这是不正确的。因此,您只能看到最后一个结果,因为在循环结束时,最后一项被设置为TextView
。由于在Posts
节点下有多个子节点,因此应该使用TextView
aListView
或更好的RecyclerView
,在这里可以添加多个元素。为了实现这一点,请按照以下代码行创建一个列表:
DatabaseReference database = FirebaseDatabase.getInstance().getReference().child("Posts");
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<String> dates = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String date = dataSnapshot1.child("date").getValue(String.class);
dates.add(date);
}
Log.d(TAG, dates.toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
DatabaseReference database=FirebaseDatabase.getInstance().getReference().child(“Posts”);
database.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
列表日期=新建ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
String date=dataSnapshot1.child(“日期”).getValue(String.class);
日期。添加(日期);
}
Log.d(标记,dates.toString());
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){}
});
获得列表后,将其传递给适配器并显示所需的元素。创建模型类hold value of retrieve child values并使用list进行hold
数据类:
public class MyData {
String city ;
String date ;
String phone ;
String picture ;
String postKey ;
String price ;
String userId ;
String userPhoto ;
long timeStamp ;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public String getPostKey() {
return postKey;
}
public void setPostKey(String postKey) {
this.postKey = postKey;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPhoto() {
return userPhoto;
}
public void setUserPhoto(String userPhoto) {
this.userPhoto = userPhoto;
}
public long getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
}
您直接将值设置为textview,因此它将始终具有最后一个值。所以使用列表来容纳所有的孩子
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<MyData> list = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
MyData value = dataSnapshot1.getValue(MyData.class);
list.add(value);
}
// you can use list for display here
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
database.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
列表=新的ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
MyData值=dataSnapshot1.getValue(MyData.class);
列表。添加(值);
}
//您可以使用列表在此处显示
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){}
});
大家好,欢迎来到Stackoverflow,不清楚您想得到什么?你能解释一下更多的plz.Posts->child(id:M-JujJDa-9liAtqG49g)->child(日期:27фццП.2020)我想从每个id中获取child(日期)吗