【问题标题】:Firebase's orderBychild().equals is not fetching any dataFirebase 的 orderBychild().equals 没有获取任何数据
【发布时间】:2017-09-22 13:07:24
【问题描述】:

考虑:

mDatabase = FirebaseDatabase.getInstance().getReference("archive");
mDatabase.orderByChild("_age").equalTo("20").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        value = dataSnapshot.getValue(String.class);
        tSResult.setText(value);
    }

    @Override
    public void onCancelled(DatabaseError error) {

        Log.w(TAG, "Failed to read value.", error.toException());
    }
});

Firebase Database.

tSResult 是我用来测试返回数据的 TextView。

我正在尝试运行此代码,但我的应用程序崩溃或不返回任何结果。

日志:

04-26 19:51:24.146 4372-4372/com.example.joe.orside E/AndroidRuntime:
致命异常:主要
进程:com.example.joe.orside,PID:4372
com.google.firebase.database.DatabaseException:转换失败
java.util.HashMap 类型的值到 String
在 com.google.android.gms.internal.zzbqi.zzaD(未知来源)
在 com.google.android.gms.internal.zzbqi.zzb(未知来源)
在 com.google.android.gms.internal.zzbqi.zza(未知来源)
在 com.google.firebase.database.DataSnapshot.getValue(未知来源)

com.example.joe.orside.MainActivity$8$1.onDataChange(MainActivity.java:755)
在 com.google.firebase.database.Query$1.onDataChange(未知来源)
在 com.google.android.gms.internal.zzbmz.zza(未知来源)
在 com.google.android.gms.internal.zzbnz.zzYj(未知来源)
在 com.google.android.gms.internal.zzboc$1.run(Unknown Source)
在 android.os.Handler.handleCallback(Handler.java:751)
在 android.os.Handler.dispatchMessage(Handler.java:95)
在 android.os.Looper.loop(Looper.java:154)
在 android.app.ActivityThread.main(ActivityThread.java:6119)
在 java.lang.reflect.Method.invoke(Native Method)

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

有什么建议吗?

【问题讨论】:

  • 发布崩溃日志。
  • @KishoreJethava 我试过了。它也崩溃了。

标签: android firebase firebase-realtime-database


【解决方案1】:

你必须迭代你的DataSnapshot

Query  query = mDatabase.orderByChild("_age").equalTo("20");
            query .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.getChildrenCount() > 0){
                        System.out.println("count : "+ dataSnapshot.getChildrenCount());
                        for(DataSnapshot child : dataSnapshot.getChildren()){
                           value = child.getValue(String.class);
                            tSResult.setText(value);
                        }
                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

【讨论】:

    【解决方案2】:

    因为这个而崩溃:

    value = dataSnapshot.getValue(String.class);
    

    改成:

    Hashmap<String,Object> value = (HashMap<String, Object>)dataSnapshot.getValue();
    

    【讨论】:

      【解决方案3】:
      Query query = mDatabase.orderByChild("_age").equalTo("20");
      query.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
              if (dataSnapshot.getChildrenCount() > 0){
                  String a = "";
                  int count = (int)dataSnapshot.getChildrenCount();
                  for(DataSnapshot child : dataSnapshot.getChildren()){
                      Emergency value = child.getValue(Emergency.class);
                      a = a + value.get_name() + "\n";
                  }
                  tSResult.setText(count + "\n" + a);
              }
          }
      
          @Override
          public void onCancelled(DatabaseError databaseError) {
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-08
        • 2023-03-08
        • 2019-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多