如何将另一个孩子放入 startAt 和 endAt,我试图放入 orderbychild 但它失败了
Posted
技术标签:
【中文标题】如何将另一个孩子放入 startAt 和 endAt,我试图放入 orderbychild 但它失败了【英文标题】:How to put another child in startAt and endAt, im trying to put orderbychild but it failed 【发布时间】:2022-01-09 20:26:35 【问题描述】:我有这段代码可以从 android studio 中的 firebase 获取我的数据,我想把数据放在孩子里面,看起来像这样。
这是实时数据库的样子,这是我的代码:
我尝试使用它,但是当我使用 orderByChild 时它失败了
Query queryByKey = pendingRef.orderByKey()
.startAt ("*" + tanggalawal)
.endAt ("*" + tanggalakhir + "\uf8ff")
.orderByChild ("DataPelanggan");
看起来像这样 但是orderByChild不能用
我需要的是在孩子中获取数据,我将在recycleview片段中显示,这是我的java文件的完整代码
public class SearchListView extends AppCompatActivity
private RecyclerView recView;
DatabaseReference databaseReference;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_search_list_view);
String tanggalawal = getIntent ( ).getStringExtra ("tanggalawal");
String tanggalakhir = getIntent ( ).getStringExtra ("tanggalakhir");
DatabaseReference db = FirebaseDatabase.getInstance ( ).getReference ( );
DatabaseReference pendingRef = db.child ("Users").child ("Pending");
Query queryByKey = pendingRef.orderByKey ()
.startAt ("*" + tanggalawal)
.endAt ("*" + tanggalakhir + "\uf8ff");
recView = (RecyclerView)findViewById (R.id.recview);
recView.setLayoutManager (new LinearLayoutManager (this));
FirebaseRecyclerOptions<Model> options =
new FirebaseRecyclerOptions.Builder<Model>()
.setQuery(queryByKey, Model.class)
.build();
adapter = new MyAdapter (options);
recView.setAdapter (adapter);
@Override
protected void onStart()
super.onStart();
adapter.startListening();
@Override
protected void onStop()
super.onStop();
adapter.stopListening();
这是我的适配器 java
public class MyAdapter extends FirebaseRecyclerAdapter <Model,MyAdapter.myViewHolder>
public MyAdapter(@NonNull FirebaseRecyclerOptions<Model> options)
super (options);
@Override
protected void onBindViewHolder(@NonNull myViewHolder myViewHolder, int i, @NonNull Model model)
myViewHolder.currentDate.setText (model.getCurrentDate ());
myViewHolder.fullName.setText (model.getFullName ());
myViewHolder.currentDateandTime.setText (model.getCurrentDateandTime ());
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view = LayoutInflater.from (parent.getContext ()).inflate (R.layout.item,parent,false);
return new myViewHolder (view);
class myViewHolder extends RecyclerView.ViewHolder
TextView currentDate, fullName, currentDateandTime;
public myViewHolder(@NonNull View itemView)
super (itemView);
currentDate = (TextView)itemView.findViewById (R.id.tvTanggalPengajuan);
fullName = (TextView)itemView.findViewById (R.id.tvNama);
currentDateandTime = (TextView)itemView.findViewById (R.id.tvNomorkontrak);
public interface OnNoteListener
void OnNoteListener(int position);
【问题讨论】:
你希望这个.orderByChild ("DataPelanggan")
做什么?
在DataPelanggan
文件夹中获取数据,我使用 startAt 根据日期范围搜索数据库,它已经可以用于获取 *20211113 的东西,但我应该在 DataPelanggan 中获取数据并显示它在回收视图中
【参考方案1】:
[我期望] 期望
.orderByChild ("DataPelanggan")
将数据放入 DataPelanggan 文件夹并在回收视图中显示
Firebase 的orderByChild
是对每个子节点属性的数据库中的数据进行排序的操作。
如果要显示每个选定子项的DataPelanggan
,则必须读取整个子项快照,然后获取其child("DataPelanggan")
。
Query queryByKey = pendingRef.orderByKey()
.startAt ("*" + tanggalawal)
.endAt ("*" + tanggalakhir + "\uf8ff");
queryByKey.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
for (DataSnapshot childSnapshot: dataSnapshot.getChildren())
DataSnapshot dataPelangganSnapshot = childSnapshot.child("DataPelanggan");
Map<String,Object> values = dataPelangganSnapshot.getValue();
String fullName = (String) values.get("fullName");
...
@Override
public void onCancelled(DatabaseError databaseError)
throw databaseError.toException();
【讨论】:
请不要链接到外部代码。我的回答解释了为什么您的代码不起作用(实际上应该显示异常),以及如何读取您显示的数据结构。如果您的设置与最初向我们展示的设置不同(在链接中使用 FirebaseUI 似乎就是这种情况),请编辑您的问题以显示这一点。展望未来,我强烈建议阅读 how to create a minimal, complete, verifiable example 以防止这种混淆。 我在顶部添加了一些代码,就我而言以上是关于如何将另一个孩子放入 startAt 和 endAt,我试图放入 orderbychild 但它失败了的主要内容,如果未能解决你的问题,请参考以下文章
将两个行值放入一列,将另一行值放入另一列,可以将更多行值添加到列中
如何从 Firebase Android Query 中的 StartAt 特定位置和 EndAt 特定位置获取值