Firebase的orderBychild()。equals不提取任何数据

时间:2017-04-25 13:26:12

标签: android firebase firebase-realtime-database

考虑:

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(未知来源)
    在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)
    at 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)

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您必须重复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) {

                }
            });

答案 1 :(得分:0)

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) {
    }
});

答案 2 :(得分:0)

因为这个而崩溃:

value = dataSnapshot.getValue(String.class);

将其更改为:

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