java - 如何从 firebase 数据库中检索数组数据?
问题描述
我从 recylerview 的 firebase 数据库中检索数据。但是我在帖子节点“postimg”中有另一个列表项。
为此,我在 onBindViewHolder 中使用了另外一个侦听器。但这对我来说似乎不对。
那么如何在 mainactivity 中完成所有这些工作并传入适配器?
这是我的代码:
@Override
public void onBindViewHolder(@NonNull final PostHolder postHolder, final int i) {
postHolder.setData(mPost.get(i));
final String PostKey=mPost.get(i).getPostid();
FirebaseAuth mAuth=FirebaseAuth.getInstance();
final String currentUserID=mAuth.getCurrentUser().getUid();
final DatabaseReference post=FirebaseDatabase.getInstance().getReference().child("Posts");
post.child(PostKey).child("postimg").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
if (dataSnapshot.exists())
{
for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren())
{
String postimagelink =dataSnapshot1.getValue().toString();
postimagelist.add(postimagelink);
}
String[] urls =postimagelist.toArray(new String[postimagelist.size()]);
postHolder.mPager.setAdapter(new SlidingImage_Adapter(mContext,urls));
postHolder.indicator.setViewPager(postHolder.mPager);
final float density = mContext.getResources().getDisplayMetrics().density;
postHolder.indicator.setRadius(5 * density);
postHolder.NUM_PAGES = urls.length;
postHolder.indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(int position) {
postHolder.currentPage = position;
}
@Override
public void onPageScrolled(int pos, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int pos) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这是我在 MainActivity 中的查询。
mAdapter = new PostAdapter(MainActivity.this);
query = PostRef
.orderByChild("timestamp")
.limitToLast(mPostsPerPage);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Post> userModels = new ArrayList<>();
for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
String o=userSnapshot.getKey();
userModels.add(userSnapshot.getValue(Post.class));
//Here I want to retrieve no of "postimg"child and its value and pass in adapter//
}
mAdapter.addAll(userModels);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
解决方案
推荐阅读
- docker - 将网络分配给一项服务是否会将其与 docker-compose 中的其他服务隔离开来?
- ruby-on-rails - 使用 'bundle exec rake db:create' 时,rake 总是中止如何解决?
- android - 启动器图标(仅限旧版)显示白色背景图标 android studio 3.3
- python - RecursionError:比较超过最大递归深度
- pandas - 什么是 pyarrow 表?它会替代熊猫数据框吗?
- amazon-s3 - 在 Amazon Athena 中创建内部表
- javascript - Parse.User.logIn 卡住了
- python - 烧瓶 request.files 返回 ImmutableMultiDict([])
- ios - 点击用户通知直接进入特定视图
- json - Using multiple anyOf inside oneOf