[英]Get random data android firebase database in RecyclerView
Firebase database Firebase数据库
In child("AdUsersINFO") I have a childs for users (userid) in this childs we have a posts . 在child(“ AdUsersINFO”)中,我有一个用户的子级(userid),在这个子级中,我们有一个posts。
My goal was to get a random post and display the data in RecyclerView
我的目标是随机发帖,并在
RecyclerView
显示数据
Currently, I have this code on onCreateView,
but it's not getting any data: 目前,我在
onCreateView,
上有此代码onCreateView,
但没有获取任何数据:
recycle = (RecyclerView) view.findViewById(R.id.recycle);
mAdUserDatabse = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO");
mAdUserDatabse.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int ads = (int) dataSnapshot.getChildrenCount();
int rand = new Random().nextInt(ads);
Iterator itr = dataSnapshot.getChildren().iterator();
for (int i = 0; i < rand; i++) {
list = new ArrayList<Adver>();
Adver value = dataSnapshot.getValue(Adver.class);
Adver fire = new Adver();
String type = value.getType();
String categories = value.getCategories();
String city = value.getCity();
fire.setType(type);
fire.setCategories(categories);
fire.setCity(city);
list.add(fire);
itr.next();
}
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(list, getContext());
final RecyclerView.LayoutManager recyce = new GridLayoutManager(getContext(), 2);
recycle.setLayoutManager(recyce);
recycle.setItemAnimator(new DefaultItemAnimator());
recycle.setAdapter(recyclerAdapter);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w("Failed to read value.", error.toException());
}
});
And this is my Adapter class 这是我的适配器类
CardAdapter class CardAdapter类
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.MyHoder> {
List<Adver> list;
Context context;
public CardAdapter(List<Adver> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public MyHoder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.card, parent, false);
return new MyHoder(view);
}
@Override
public void onBindViewHolder(MyHoder holder, int position) {
Adver mylist = list.get(position);
holder.type.setText(mylist.getType());
holder.categories.setText(mylist.getCategories());
holder.city.setText(mylist.getCity());
holder.availability.setText(mylist.getAvailability());
holder.cost.setText(mylist.getCost());
}
@Override
public int getItemCount() {
int arr = 0;
try {
if (list.size() == 0) {
arr = 0;
} else {
arr = list.size();
}
} catch (Exception e) {
}
return arr;
}
class MyHoder extends RecyclerView.ViewHolder {
TextView type, categories, city, availability, cost;
ImageView img;
public MyHoder(View itemView) {
super(itemView);
type = (TextView) itemView.findViewById(R.id.vType);
categories = (TextView) itemView.findViewById(R.id.vCategories);
city = (TextView) itemView.findViewById(R.id.vCity);
availability = (TextView) itemView.findViewById(R.id.vAvailability);
cost = (TextView) itemView.findViewById(R.id.vPrice);
}
}
}
Your DatabaseReference
is wrong. 您的
DatabaseReference
错误。 You need to change this line of code: 您需要更改以下代码行:
mAdUserDatabse = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO");
with 与
mAdUserDatabse = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO").child(uid);
In which the uid
is the user id of the logged-in user. uid
是登录用户的用户ID。 To get the that uid
, please use this line of code: 要获取该
uid
,请使用以下代码行:
String uid = FirebaseUser.getInstance().getCurrentUser().getUid();
Whith your code, when you are iterating using getChildren()
method, you iterating through users not posts as I understand you intend to do. 请使用您的代码,当您使用
getChildren()
方法进行迭代时,您遍历用户而不是帖子,据我了解您打算这样做。
mAdUserDatabse = FirebaseDatabase.getInstance().getReference().child("AdUsersINFO");
mAdUserDatabse.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int ads = (int) dataSnapshot.getChildrenCount();
int rand = new Random().nextInt(ads);
for(DataSnapshot data: dataSnapshot.getChildren()){
for(DataSnapshot datas: data.getChildren()){
for(int i = 0; i < rand; i++) {
list = new ArrayList<Adver>();
Adver value = datas.getValue(Adver.class);
Adver fire = new Adver();
String type = value.getType();
String categories = value.getCategories();
String city = value.getCity();
fire.setType(type);
fire.setCategories(categories);
fire.setCity(city);
list.add(fire);
}}}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.