如何在Firebase Android中查询SQL IN子句
如何在Firebase Android中查询SQL IN子句? 我想在Firebase Recycler适配器中使用它来根据某些条件仅检索一些子项。 类似于以下声明:
SQL----> select * from posts where city in(10 cities comes here)
我需要Firebase查询才能在Firebase Recycler适配器中使用它。
Firebase数据库没有SQL的WHERE id IN (1,2,3)
。 在按ID选择的情况下,Firebase检索项目的方式同样快,因为Firebase会对请求进行管道处理 。
你的情况有所不同,因为你没有按ID选择。 很遗憾,无法将您的查询直接映射到Firebase数据库上的等效内容。
我强烈建议您开始将数据模型映射到更适合NoSQL数据库的东西,而不是尝试使Firebase的NoSQL数据库做SQL技巧。 本篇关于NoSQL数据建模的文章以及我们针对SQL开发人员的Firebase新video系列,可以帮助您启动这一过程。
另请参阅Firebase复杂“包含”查询
我找到了解决方案:我们无法使用FirebaseRecyclerAdapter
。 相反,我们必须创建扩展RecyclerView.ViewHolder
自定义适配器。
要将值传递给此适配器,首先我们必须使用addValueEventListener
检索数据,然后我们必须将值传递给适配器。
这是我的代码……
final ArrayList timelines = new ArrayList<>(); mDatabaseTimeline.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { final Timeline timeline = dataSnapshot.getValue(Timeline.class); if(timeline != null){ mDatabaseFriends.child(mAuth.getCurrentUser().getUid()).child("active").addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (mAuth.getCurrentUser().getUid().equals(timeline.getUid()) || dataSnapshot.hasChild(timeline.getUid())) { timelines.add(timeline); mTimelineRecycler.setAdapter(new RecyclerAdapter(TimelineFragment.this.getContext(), timelines)); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } });
适配器—–>
public class RecyclerAdapter extends RecyclerView.Adapter { Context context; ArrayList timeline; public RecyclerAdapter(Context context, ArrayList timeline) { this.context = context; this.timeline = timeline; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(context); View row = inflater.inflate(R.layout.timeline_row, parent, false); TimelineViewHolder holder = new TimelineViewHolder(row); return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final String post_key = timeline.get(position).getPostkey(); ((TimelineViewHolder) holder).setUsername(timeline.get(position).getUsername()); } @Override public int getItemCount() { return timeline.size(); } public class TimelineViewHolder extends RecyclerView.ViewHolder { public TimelineViewHolder(View itemView) { super(itemView); view = itemView; } public View getView() { return view; } public void setUsername(String username) { TextView usernameTxtView = (TextView) view.findViewById(R.id.timeline_username); usernameTxtView.setText(username); } } }
- Android PointF构造函数不能在JUnit测试中工作
- AlarmManager从不在AlarmReceiver / BroadcastReceiver中调用onReceive
- 我的Android应用程序中由Theme.AppCompat引起的IllegalStateException
- android – 获取位置并仅在条件为真时将数据发送到远程服务器
- 如何解决java.lang.string无法使用xml解析器强制转换为java.lang.integer android
- Android内存泄漏,EMA可疑:“byte ”由“”加载
- 从java中的两个不同的数组列表对象中找到不常见的常见所有元素
- Twitter4j:获取某条推文的回复列表
- 遍历android中的复杂xml文件