我想使用Firebases数据库中存储的数据来创建重复的回收站视图,但是问题是我必须加入并且不知道该如何做。
我想在“请求者”键值下获取数据,并且希望使用用户键数据。我想做的是仅在请求者用户ID下找到并获取数据全名和图像。
也许需要加入?我该怎么办?
这是我在请求者下获取数据的片段
package com.example.together.fragment;
public class PetchingLoungeFragment extends Fragment {
private static final String TAG = "PetFirendsFragment";
RecyclerView recyclerView;
PetchingLoungeAdapter petchingLoungeAdapter;
List<Lounge> requestorUserList;
FirebaseUser firebaseUser;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
Log.d(TAG, "분양키 리스트 목록처음"+requestorUserList);
View view = inflater.inflate(R.layout.fragment_pet_firends, container, false);
recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("PetchingBunyang").child(firebaseUser.getUid()).child("Requestor");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
for (DataSnapshot childSnapshot : dataSnapshot.getChildren())
{
Lounge lounge = childSnapshot.getValue(Lounge.class);
String key = childSnapshot.getKey();
Log.d(TAG, "라운지키"+key);
//각 신청키
lounge.setRequestorId(key);
requestorUserList.add(lounge);
Log.d(TAG, "신청자키: "+requestorUserList);
Log.d(TAG, "신청: "+lounge);
}
Collections.reverse(requestorUserList);
petchingLoungeAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(linearLayoutManager);
requestorUserList = new ArrayList<>();
petchingLoungeAdapter = new PetchingLoungeAdapter(getContext(), requestorUserList);
recyclerView.setAdapter(petchingLoungeAdapter);
return view;
}
}
这是我的回收站视图适配器
package com.example.together.adapter;
public class PetchingLoungeAdapter extends RecyclerView.Adapter<PetchingLoungeAdapter.MyViewHolder> {
private static final String TAG = "PetchingBunyangAdapter";
FirebaseUser firebaseUser;
DatabaseReference reference;
Context mContext;
List<Lounge> mLounge;
public PetchingLoungeAdapter(Context mContext, List<Lounge> mLounge) {
this.mContext = mContext;
this.mLounge = mLounge;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.list_petching_lounge, parent, false);
return new PetchingLoungeAdapter.MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder viewHolder, int position)
{
final Lounge lounge = mLounge.get(position);
getRequestorUserInfo(lounge.getRequestorId(), viewHolder.img_requestor, viewHolder.requestor_name);
viewHolder.img_requestor.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(v.getContext(), PetchingBunyangDetailInfo.class);
// intent.putExtra("petBunyangId",mUser.get(position).getPetBunyangId());
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount()
{
return mLounge.size();
//mPetchingLounge.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
public Button allow, refuse;
public ImageView img_requestor;
public TextView requestor_name;
public MyViewHolder(View itemView)
{
super(itemView);
img_requestor = itemView.findViewById(R.id.img_requestor);
allow = itemView.findViewById(R.id.allow);
refuse = itemView.findViewById(R.id.refuse);
requestor_name = itemView.findViewById(R.id.requestor_name);
}
}
// 펫 정보 이름, 나이, 견종, 성별,
private void getRequestorUserInfo(String petbunyangid, final ImageView imageView, final TextView petName)
{
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid()).child("Requestor").child(petbunyangid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Lounge lounge = dataSnapshot.getValue(Lounge.class);
lounge.getRequestorId();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
答案 0 :(得分:1)
尝试以下操作:
java
首先添加对子项nohup
的引用,然后在其内部循环两次以获取具有值DatabaseReference reference = FirebaseDatabase.getInstance().getReference("PetchingBunyang").child(firebaseUser.getUid()).child("Requestor");
DatabaseReference userReference = FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
for(DataSnapshot ds : datas.getChildren()){
String id = ds.getKey();
userReference.child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String fullName = dataSnapshot.child("fullname").getValue(String.class);
String imageUrl = dataSnapshot.child("imageUrl").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
的{{1}}。然后,在检索Requestor
之后,向节点userid
添加另一个引用,并检索该用户的数据。
答案 1 :(得分:1)
您有2个选择: 1.获取所有用户列表并映射数据。 2.为每个用户ID添加get查询。
我更喜欢选项2。
摘要:
List<UserBean> userBeanList= new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("PetchingBunyang").child(firebaseUser.getUid()).child("Requestor");
reference.addSingleValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//got all the list of the user ids
//userList is array of String which contains all userIds
for (String userid : userList) {
FirebaseDatabase.getInstance().getReference("Users").child(userid).addSingleValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//got all the list of the user ids
//
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 2 :(得分:0)
您实际上正在做的是获取节点“ Users”中的用户列表。顺便问一下,什么是“休息室”对象?您需要澄清这一点(给出该类的代码)。无论如何,据我了解,您需要这样做:
private void getRequestorUserInfo(String petbunyangid, final ImageView imageView, final TextView petName) {
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot lounge : dataSnapshot.getChildren()) {
Lounge retrievedLounge = lounge.getValue(Lounge.class);
retrievedLounge.getRequestorId(); //This is the id you are looking for.
retrievedLounge.getName(); //These are functions that may be in your lounge class.
retrievedLounge.getPhotUrl();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
说实话,我不完全理解您的问题,因为英语有点...您知道这很奇怪。没关系,这是我认为您遇到的问题的代码。希望对您有所帮助:)