获取节点的子列表,然后在 firebase 的另一个节点中迭代相似的值,然后获取 ita 值(Firebase android))
Getting the child list of a node then iterate for similar values in another node in firebase and then get ita value(Firebase android))
我的 Firebase 数据结构:
Bids-
-jobID
-userID : 1
-userID2 : 1
Jobs
-jobID
-name:''
-location:''
-desc:''
Users
-userID
-name:'name1'
-image: 'downloadUrl'
-UserID2
-name:'name2'
-image: 'downloadUrl'
我可以使用以下代码获取出价中 jobID 下的所有键,即 userID 和 userID2:
mBidders.child(getIntent().getExtras().getString("jobID")).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> lt = new ArrayList<String>();
for (DataSnapshot mSnapshot: dataSnapshot.getChildren()) {
lt.add(String.valueOf(mSnapshot.getKey()));
}
for (String userId : lt) {
Log.d("users", userId);
getUsersInfo(userId);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
现在,当我想使用这种方法获取用户中每个用户下的所有值时:
getUsersInfo(String userId){
Query query = mUsers.child(userId);
FirebaseRecyclerAdapter<Users, BiddedJobViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, BiddedJobViewHolder>(
Users.class,
R.layout.bidder_profile_row,
BiddedJobViewHolder.class,
query
) {
@Override
protected void populateViewHolder(BiddedJobViewHolder viewHolder, Users model, int position) {
viewHolder.setTitle(model.getUser());
viewHolder.setImge(getApplicationContext(), model.getImage());
}
};
bidRecycleView.setAdapter(firebaseRecyclerAdapter);
}
它起初有效,但在添加另一个用户时仅将一个用户信息检索到回收视图,并用新用户替换(在回收视图中)。现在,当我 运行 应用程序时,出现此错误:
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.toni.patakazi.model.Users
at com.google.android.gms.internal.zzbqi.zze(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzb(Unknown Source)
at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.firebase.ui.database.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:154)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:143)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:183)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6067)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6100)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5282)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5158)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2061)
at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:562)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:580)
at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3379)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3188)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3632)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:633)
at android.widget.FrameLayout.onLayout(FrameLayout.java:568)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:633)
at android.widget.FrameLayout.onLayout(FrameLayout.java:568)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:633)
at android.widget.FrameLayout.onLayout(FrameLayout.java:568)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2445)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2142)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1267)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6501)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:572)
at android.v
我似乎不明白error.If还有另一种更好的方法我会非常感激
以上是您在将其捕获为字符串时导致的类型为 Users 的格式错误
尝试:
//Get Jobs
Map<String, String> mapJobs = new HashMap<String, String>();
for( DataSnapshot i : dataSnapshot.getChildren()) {
String jobs = i.getValue(String.class);
mapJobs.put(i.getKey(),jobs);
}
ArrayList<String> jobsList = new ArrayList<>(mapJobs.values());
//Get Bids
Map<String, String> mapBids = new HashMap<String, String>();
for( DataSnapshot i : dataSnapshot.getChildren()) {
String bid = i.getValue(String.class);
mapBids.put(i.getKey(),bid);
}
ArrayList<String> bidList = new ArrayList<>(mapBids.values());
我的 Firebase 数据结构:
Bids-
-jobID
-userID : 1
-userID2 : 1
Jobs
-jobID
-name:''
-location:''
-desc:''
Users
-userID
-name:'name1'
-image: 'downloadUrl'
-UserID2
-name:'name2'
-image: 'downloadUrl'
我可以使用以下代码获取出价中 jobID 下的所有键,即 userID 和 userID2:
mBidders.child(getIntent().getExtras().getString("jobID")).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> lt = new ArrayList<String>();
for (DataSnapshot mSnapshot: dataSnapshot.getChildren()) {
lt.add(String.valueOf(mSnapshot.getKey()));
}
for (String userId : lt) {
Log.d("users", userId);
getUsersInfo(userId);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
现在,当我想使用这种方法获取用户中每个用户下的所有值时:
getUsersInfo(String userId){
Query query = mUsers.child(userId);
FirebaseRecyclerAdapter<Users, BiddedJobViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, BiddedJobViewHolder>(
Users.class,
R.layout.bidder_profile_row,
BiddedJobViewHolder.class,
query
) {
@Override
protected void populateViewHolder(BiddedJobViewHolder viewHolder, Users model, int position) {
viewHolder.setTitle(model.getUser());
viewHolder.setImge(getApplicationContext(), model.getImage());
}
};
bidRecycleView.setAdapter(firebaseRecyclerAdapter);
}
它起初有效,但在添加另一个用户时仅将一个用户信息检索到回收视图,并用新用户替换(在回收视图中)。现在,当我 运行 应用程序时,出现此错误:
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.toni.patakazi.model.Users
at com.google.android.gms.internal.zzbqi.zze(Unknown Source)
at com.google.android.gms.internal.zzbqi.zzb(Unknown Source)
at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.firebase.ui.database.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:154)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:143)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:183)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6067)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6100)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5282)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5158)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2061)
at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:562)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:580)
at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3379)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3188)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3632)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:633)
at android.widget.FrameLayout.onLayout(FrameLayout.java:568)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:633)
at android.widget.FrameLayout.onLayout(FrameLayout.java:568)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1959)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1813)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1722)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:633)
at android.widget.FrameLayout.onLayout(FrameLayout.java:568)
at android.view.View.layout(View.java:15927)
at android.view.ViewGroup.layout(ViewGroup.java:5113)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2445)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2142)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1267)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6501)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
at android.view.Choreographer.doCallbacks(Choreographer.java:603)
at android.view.Choreographer.doFrame(Choreographer.java:572)
at android.v
我似乎不明白error.If还有另一种更好的方法我会非常感激
以上是您在将其捕获为字符串时导致的类型为 Users 的格式错误 尝试:
//Get Jobs
Map<String, String> mapJobs = new HashMap<String, String>();
for( DataSnapshot i : dataSnapshot.getChildren()) {
String jobs = i.getValue(String.class);
mapJobs.put(i.getKey(),jobs);
}
ArrayList<String> jobsList = new ArrayList<>(mapJobs.values());
//Get Bids
Map<String, String> mapBids = new HashMap<String, String>();
for( DataSnapshot i : dataSnapshot.getChildren()) {
String bid = i.getValue(String.class);
mapBids.put(i.getKey(),bid);
}
ArrayList<String> bidList = new ArrayList<>(mapBids.values());