当前位置: 首页 > 知识库问答 >
问题:

在具有唯一密钥的数据库中查询Firebase RecycorOptions

邓俊英
2023-03-14

我已经更改了数据库,以便为所有条目提供唯一的密钥。

 public class ResocardFragment extends Fragment{
    private RecyclerView recyclerView;
    CardAdapter adapter;
    DatabaseReference mbase;
    double SpendeFra,SpendeAngy;

    private @NonNull FragmentResocardBinding binding;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = FragmentResocardBinding.inflate(inflater, container, false);
        String reference = ""+Spesa.annoEffettivo()+Spesa.meseEffettivo()+"/spese";

        mbase = FirebaseDatabase.getInstance().getReference(reference);

        recyclerView = binding.RecyclerResocard;
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        FirebaseRecyclerOptions<Spesa> options
                = new FirebaseRecyclerOptions.Builder<Spesa>()
                .setQuery(mbase, Spesa.class)
                .build();
        adapter = new CardAdapter(getActivity(), options);
        recyclerView.setAdapter(adapter);

        View root = binding.getRoot();
        return root;
    }

    @Override public void onStart()
    {
        super.onStart();
        adapter.startListening();
    }

    @Override public void onStop()
    {
        super.onStop();
        adapter.stopListening();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // Getting Post failed, log a message
            }
        };
        mbase.addValueEventListener(postListener);
    }
}

我是斯佩萨。班

 public class Spesa {
   public String desc;
   public Double costo;
   public String categoria;
   public String chi;
   public Integer giorno;
   public Integer mese;
   public Integer anno;

   public Spesa(){

   }

   public Spesa(String spesa,Double costo, String categoria, String chi, Integer giorno, Integer mese, Integer anno){
       this.costo = costo;
       this.desc = spesa;
       this.categoria = categoria;
       this.chi = chi;
       this.giorno = giorno;
       this.mese = mese;
       this.anno = anno;
   }
   public Spesa(String desc, Double costo, String chi){
       this.desc = desc;
       this.costo = costo;
       this.chi = chi;
   }

   public String getDesc() {
       return desc;
   }

   public void setDesc(String desc) {
       this.desc = desc;
   }

   public double getCosto() {
       return costo;
   }

   public void setCosto(Double costo) {
       this.costo = costo;
   }

   public String getCategoria() {
       return categoria;
   }

   public void setCategoria(String categoria) {
       this.categoria = categoria;
   }

   public String getchi() {
       return chi;
   }

   public void setchi(String chi) {
       this.chi = chi;
   }

   public Integer getGiorno() {
       return giorno;
   }

   public void setGiorno(Integer giorno) {
       this.giorno = giorno;
   }

   public Integer getMese() {
       return mese;
   }

   public void setMese(Integer mese) {
       this.mese = mese;
   }

   public Integer getAnno() {
       return anno;
   }

   public void setAnno(Integer anno) {
       this.anno = anno;
   }

   public static String meseEffettivo(){
       Calendar c = Calendar.getInstance();
       String[] monthName = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio",
               "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
       //da gestire: IF giorno > 27 dic...
       if(c.get(Calendar.DAY_OF_MONTH)>27){
           return monthName[c.get(Calendar.MONTH)+1];
       }
       else{
           return monthName[c.get(Calendar.MONTH)];
       }

   }
   public static String annoEffettivo(){
       Integer anno = 0;
       Calendar c = Calendar.getInstance();
       if(c.get(Calendar.MONTH)==11){
           if(c.get(Calendar.DAY_OF_MONTH)>=27){
               anno = c.get(Calendar.YEAR)+1;
           }
       }
       else {
           anno = c.get(Calendar.YEAR);

       }
       return anno.toString();
   }

}

这段代码工作正常,直到我有了没有唯一密钥的“旧”数据库。现在我不得不面对这些陈述:

        DatabaseReference mbase = FirebaseDatabase.getInstance().getReference(reference);

        FirebaseRecyclerOptions<Spesa> options
                = new FirebaseRecyclerOptions.Builder<Spesa>()
                .setQuery(mbase, Spesa.class)
                .build();

问题是我不知道如何有一个指向键的参考。特别是,变量“选项”不是“Spesa”类,但它是null。如果我没有适配器,我会做为(Datasnapshot ds: datasSnapshot.get儿童),然后进入为我将使用getValue,但在这种情况下,与Firebase RecycreOptions我真的不知道该怎么办。

我在这个网站上搜索过,但没有找到任何解决我问题的方法。

这是我数据库的照片

谢谢提前

共有1个答案

岳劲
2023-03-14

我解决了改变数据库结构的问题。唯一键是一个嵌套,现在我可以迭代,适配器工作正常

 类似资料:
  • 我正在使用Postgres,我有一个具有唯一键(memberId,propertyName)的表。我使用的是onDuplicateKey,生成的代码显示它使用的是on conflict,但它使用的是id。是否可以指定您自己的键来检查,或者Jooq是否尝试读取表并检查是否存在唯一约束?我目前的解决方法是先进行选择,然后进行更新或插入。

  • 我有几个关于Azure Key Vault的问题,我需要一些技术帮助:链接https://docs.microsoft.com/en-us/Azure/key-vault/general/overview指出,“机密和密钥由Azure保护,使用行业标准算法、密钥长度和硬件安全模块(HSMs)。使用的HSMs经过联邦信息处理标准(FIPS)140-2级验证”。 我想确认这是否适用于秘密,就像适用于密

  • 问题内容: 我刚刚发现了信息,我只是在检查是否有与项目中的一些朋友一起遇到约束的想法,尽管这更多是我一直在尝试找到的理论问题一个答案一段时间。 我不太喜欢密码学,但是如果我不够清楚,我将尝试编辑/评论以澄清任何问题。 简而言之,环境是这样的: 前端用于访问加密/解密密钥,后端用于存储和查询的应用程序。 例如,有一个您无法访问几个字段的数据库,让我们说“地址”,它通常是文本/ varchar。 您无

  • 我在从Firebase实时数据库查询嵌套数据时遇到问题。 给出以下示例数据结构: 让我们假设这个集合将有数百个孩子。此外,在执行查询之前,ID是随机的和未知的。如图所示,每个交叉点都有几个其他值。 首先,我必须列出键以给定值开始的所有交叉。例如,如果我搜索1,我希望得到这个简单例子中的所有交叉。 此代码段解决了这个问题。虽然,我仍然不确定这是否是实现这一目标的最佳方式。 我的主要问题是,现在我必须

  • 我用过这个命令 生成密钥库。它工作正常,但从我读到的内容来看,这个命令还应该提示您输入密钥密码(而不是存储密码)?我从来没有收到过这样的提示。我能跑 查看密钥库的内容。钥匙似乎就在那里。。。正确的别名在那里。在哪里获取/设置特定别名的密码? 我有一个key.properties在Android目录 在build.gradle我有: 当我试图生成一个发布版本时,我得到了 我想它可能与keyPassw

  • 问题内容: 我对数据库表中的唯一行有问题,现在可以这样做: 当我在所有列中使用UNIQUE属性时,即使第二个Moore名称不同,我也会插入第二个Moore错误:/ 如何使用UNIQUE(或INDEX?)在db表中执行类似的操作: 抱歉,如果问题很简单,但是我是sql的初学者,并且在使用UNIQUE之类的UNIQUE时找到一些好的示例时遇到问题:/或者也许我必须在插入新行之前从db中选择一个表并检查