【问题标题】:My code is retrieving data only from first field of my database. Please see details我的代码仅从数据库的第一个字段中检索数据。请查看详情
【发布时间】:2016-06-02 05:59:42
【问题描述】:

我编写了一些从我的 firebase 数据库中检索数据的代码。

问题是我的代码只从数据库中的第一个数据字段中检索数据,而不是从所有字段中检索数据。

我希望它从我的数据库的每个字段中检索数据。

这是我的代码:

retrieveRef = new Firebase("https://appname.firebaseio.com/hDetails/");

retrieveRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        hDescription = (String) dataSnapshot.child("hDescription").getValue();
        hImage = (String) dataSnapshot.child("hImage").getValue();
        hLat = (String) dataSnapshot.child("hLat").getValue();
        hLng = (String) dataSnapshot.child("hLng").getValue();
        postedAtTime = (String) dataSnapshot.child("postedAtTime").getValue();
        postedBy = (String) dataSnapshot.child("postedBy").getValue();
        postedOnDate = (String) dataSnapshot.child("postedOnDate").getValue();
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
        Toast.makeText(getBaseContext(), firebaseError.getMessage(),
                Toast.LENGTH_SHORT).show();
    }
});

这是我的数据库的图像:

仅从最后一个字段检索数据,即每次都从f4452618-a073-4868-a9c6-050b055b4861 检索。

这里是build.gradle(模块:app):

    apply plugin: 'com.android.application'

    android {

        compileSdkVersion 23
        buildToolsVersion "23.0.2"
        defaultConfig {
            applicationId "com.abc.xyz"
            minSdkVersion 16
            targetSdkVersion 23
            versionCode 5
            versionName "0.4"
            multiDexEnabled true;
        }
        packagingOptions {
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE-FIREBASE.txt'
            exclude 'META-INF/NOTICE'
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.config
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.4.0'
        compile 'com.android.support:design:23.4.0'
        compile 'com.android.support:cardview-v7:23.4.0'
        compile 'com.android.support:recyclerview-v7:23.4.0'
        compile 'com.firebase:firebase-client-android:2.3.1'
        compile 'com.firebaseui:firebase-ui:0.3.1'
        compile 'com.facebook.android:facebook-android-sdk:4.1.0'
        compile 'com.google.android.gms:play-services-maps:9.0.0'
        compile 'com.google.android.gms:play-services-plus:9.0.0'
        compile 'com.android.support:support-v4:23.4.0'
        compile 'com.squareup.picasso:picasso:2.5.2'
        compile 'com.google.android.gms:play-services-location:9.0.0'
        compile 'com.firebase:geofire:1.1.0'
        compile 'com.google.firebase:firebase-database:9.0.1'
        compile 'io.github.yavski:fab-speed-dial:1.0.4'
        compile 'com.google.gms:google-services:3.0.0'
    }

apply plugin: 'com.google.gms.google-services'

这里是buid.gradle(项目:项目名称):

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'com.google.gms:google-services:3.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这里出了什么问题?

请告诉我。

抱歉,如果问题似乎格式错误。我还是个初学者。

【问题讨论】:

    标签: java android firebase firebase-realtime-database firebase-hosting


    【解决方案1】:

    尝试使用 Firebase 中的 Query 类

     DatabaseReference root = FirebaseDatabase.getInstance().
     getReferenceFromUrl("https://appname.firebaseio.com/hDetails/");
    
     Query playlistQuery = root.orderByKey();
    
     playlistQuery.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s)
                {
    
                    //Make sure you have a empty constructor to de-serialize it
    
                    YourPOJO playlist = dataSnapshot.getValue(YourPOJO.class);
                    playlist.getName(); // Depends on the field names
                    playlist.getDetails();
                    ....
                }
                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
                }
    
                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {
    
                }
    
                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
    
                }
            });
    

    【讨论】:

    • 这里的DatabaseReferenceFirebaseDatabase 是什么?
    • 但是为什么我无法在我的项目中导入这些?它说:Cannot resolve method 'DatabaseReference' or 'FirebaseDatabase'.
    • 添加新的依赖项
    • 您必须将“Google Play Services”、“Google Repository”和“Android Support Repository”更新到 Android SDK 中的最新版本。
    【解决方案2】:

    这将获取 hDetails 列表:

    FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference retrieveRef = database.getReference("hDetails");
        final List<YourPOJO> pojoList = new ArrayList<>();
        retrieveRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                pojoList.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    pojoList.add(snapshot.getValue(YourPOJO.class));
                }
    
            }
    
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
            }
    
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
    
            }
    
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
            }
    
            @Override
            public void onCancelled(FirebaseError firebaseError) {
                Toast.makeText(getBaseContext(), firebaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    

    要在顶级 build.gradle 上添加的依赖项:

    dependencies {
            classpath 'com.android.tools.build:gradle:2.1.0'
            classpath 'com.google.gms:google-services:3.0.0'
        } 
    

    应用级 build.gradle:

    dependencies {
        compile 'com.google.firebase:firebase-core:9.0.0'
        compile 'com.google.firebase:firebase-auth:9.0.0'
        compile 'com.google.firebase:firebase-database:9.0.0'
    }
    apply plugin: 'com.google.gms.google-services'
    

    【讨论】:

    • 看来您使用的是旧版本的 Firebase。尝试使用较新的版本 - firebase.google.com/docs/android/setup
    • 请查看已编辑的问题。我添加了 build.gradle 文件。
    • 这是什么错误:Caused by: java.lang.RuntimeException: Android classes not found. Are you using the firebase-client-android artifact? 在这一行 Firebase.setAndroidContext(this);?
    • 是版本之间的代码冲突。首先删除所有旧版本的依赖项和代码,并开始使用与最新入门指南的全新集成。
    • 如何将GeoFire升级到最新版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多