如何将另一个孩子放入 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 特定位置获取值

Firebase Rest Api:如何使用 OrderBy() 和 StartAt() 使用 Last Key id

使用'where'的Firestore查询日期范围

Capistrano - 如何将文件放入共享文件夹?

如何将自定义单元格放入另一个自定义单元格?