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

从基于火源的数据库读取数据失败

郎宏浚
2023-03-14

我正在读取火基数据库的数据。以下是存储在数据库中的数据的快照。

在以“8SS...”开头的快照字符串中,是用户的 uid。以下是用于从 firebase 数据库中检索数据的代码。

//To check if uid of current user and database user matches.
Query q = FirebaseDatabase.getInstance().getReference().child("Location").child(user.getUid()).equalTo(FirebaseAuth.getInstance().getCurrentUser().getUid());
q.addListenerForSingleValueEvent(
        new ValueEventListener() {
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
                     for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
                            Log.d(TAG, "Yay!!");
                            User us = singleSnapshot.getValue(User.class);
                            String string = "Name: "+ us.getName()+"\nAddress: "+ us.getlat()+ us.getlon()+ "\n\n";
                            n.setText(string);
                   }
                }

             @Override
             public void onCancelled(DatabaseError databaseError) {
                        // read query is cancelled.
                        Log.d(TAG, "loadPost:onCancelled", databaseError.toException());
                    }
             });

用户类包含getter和setters。
错误是只有空文本视图出现结论从数据库读取失败

  1. 如何评估查询是真还是假?
  2. 从值事件中读取时的错误是什么?

我尝试使用这个:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Location").child("8SS0uk4FmiPUtXP208Tx8Cqxt2z2");

然后调用<code>ref。addListenerForSingleValueEvent()但仍然没有显示任何内容。

我尝试使用这个:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Location").child(user.getUid());

这给出了< code >数据快照:“数据快照={key='-Kn ...”,value= "纬度:..,经度:...,姓名:……”}。但这不是我所期望的。< br >数据库结构应该是< code >位置-

这是我在数据库中插入数据的代码。

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser() ;
refDatabase = FirebaseDatabase.getInstance().getReference().child("Location").child(user.getUid());
DatabaseReference newPost = refDatabase.push();
//the push() command is already creating unique key
Map<String, String> mapname = new HashMap<String, String>();
mapname.put("Name", n.getText().toString());
mapname.put("latitude", Double.toString(lat));
mapname.put("longitude", Double.toString(longt));
mapname.put("user id", user.getUid());
newPost.setValue(mapname);

共有2个答案

罗安和
2023-03-14

为什么要使用等于然后获取当前用户。. child(user.getUid())应该已经是您的当前用户,它为您提供了您尝试收听的子用户的值。

我认为乌伊德是“8SSOuk.......”的孩子。所以它应该是这样的:火基地数据库.getInstance().getReference().子(“位置”).子(“8SSOuk...”).子(“8SSOuk...”).子(用户.

戚森
2023-03-14

我通过引入多个 for 循环解决了这个问题。
因此,我的第一个孩子的快照是数据快照:“数据快照={键='-Kn...',值=”纬度:..,经度:...,名称:...“}
下面是提取所有值和键的代码:

mRef.addValueEventListener(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Log.d(TAG, "Children" + dataSnapshot.getKey());
                    for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
                        String st = singleSnapshot.getKey();
                        Log.d(TAG, "Yay!!" + singleSnapshot.child(st));
                        st = "";
                        int count=0;
                        for(DataSnapshot singleSnap : singleSnapshot.getChildren()) {
                            Log.d(TAG, "String" + singleSnap.getValue());
                            //n.setText(us.getName());
                            if(count==0) {
                                st = "Name: " + singleSnap.getValue() + '\n';
                            }
                            else if(count==1) {
                                st = st + "Latitude: " + singleSnap.getValue() + '\n';
                            }
                            else if(count==2) {
                                st = st + "Longitude: " + singleSnap.getValue() + '\n';
                            }
                            count++;
                        }
                        final TextView rowTextView = new TextView(Menu5.this.getActivity());
                        rowTextView.setText((CharSequence) st);
                        ll.addView(rowTextView);
                    }
                }

这为push.So创建的每个唯一id提供了单个键和值对,我不得不对连接和显示进行硬编码,因为整个应用程序的结构将保持不变。

 类似资料:
  • 我在数据库中有数据:Firebase中的数据库 我想读取所有子项(Belgia、Czechy、Polska…),并将其显示在文本字段中,但单击按钮后(我不会更改数据库中的数据)。按钮分配了以下功能: 在我写代码之前: 不幸的是,当我按下按钮时,什么也没有发生。 我很感激你的帮助问候,马辛

  • 我试图从Firebase数据库中读取数据,我已经到处阅读和查找,但我已经走到了死胡同。 这就是我所做的一切。 依赖项: 实现'com.google.firebase: Firebase存储: 9.2.1' 实现'com。谷歌。firebase:firebase数据库:9.2。1' 实现'com。谷歌。firebase:firebase授权:9.2。1' 实现'com。谷歌。火基:火基核心:9.2。

  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 因此,我尝试拍摄数据库的快照,并添加带有子项的数组字符串中的项。 我的set和get java文件如下所示 但是,当我的程序到达dataQuery方法并尝试获取和设置名称和成分时,它会崩溃。有人能解释一下我做错了什么,以及是否有更好的方法来使用数据库快照来做到这一点吗? 进程:in.tvac.akshayejh.firebasesearch,PID:24798java.lang.NullPoint

  • 我的springboot应用程序尝试从两个数据源(emwbis和backupemwbis)读取数据。我按照下面的链接配置了我的springboot应用程序以从两个不同的数据源读取数据。 http://www.baeldung.com/spring-data-jpa-multiple-databases 我的应用程序当前的问题是,它总是从主数据源(emwbis)读取数据。我已经编写了以下代码。 主数

  • 我的nextjs webapp中有一个实时数据库,我用它来发送通知。 我的数据库的架构如下: 我仅以管理员身份从服务器端写入数据,但按以下方式从客户端读取数据: 在这一刻,我有以下规则: 正如您所看到的,每个经过身份验证的人都可以阅读所有内容。我希望用户只阅读他自己的通知。ObjectID是我的mongoDB中的引用。 例如,如果我的我只想访问路径的数据,如果我试图从,那么我什么也得不到(或错误)