我是火力基地的新手。我无法从 firebase 检索数据

Posted

技术标签:

【中文标题】我是火力基地的新手。我无法从 firebase 检索数据【英文标题】:I am new to firebase. I am not able to retrieve data from firebase 【发布时间】:2017-09-03 21:13:22 【问题描述】:

   mDatabase.child("KhCm8DZpg72BBXCISCC").addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 

                Product product = dataSnapshot.getValue(Product.class);
                     s="Product Name: "+product.getName();
                          textView.setText(s);    
    

            @Override
            public void onCancelled(DatabaseError error) 

            
        );

这是我用来检索的代码

04-09 09:57:42.501 9450-9450/? E/FirebaseApp:Firebase API 初始化失败。 java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 com.google.firebase.FirebaseApp.zza(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.provider.FirebaseInitProvider.onCreate(未知来源) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1748) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1723) 在 com.google.firebase.provider.FirebaseInitProvider.attachInfo(未知来源) 在 android.app.ActivityThread.installProvider(ActivityThread.java:5153) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4748) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688) 在 android.app.ActivityThread.-wrap1(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.NoSuchMethodError: No static method zzy(Ljava/lang/Object;)Ljava/lang/Object;在 Lcom/google/android/gms/common/internal/zzaa 类中;或其超类(“com.google.android.gms.common.internal.zzaa”的声明出现在 /data/app/com.example.android.supermarket-1/split_lib_dependencies_apk.apk:classes15.dex 中) 在 com.google.android.gms.measurement.internal.zzx.zzdq(未知来源) 在 com.google.android.gms.measurement.AppMeasurement.getInstance(未知来源) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.google.firebase.FirebaseApp.zza(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.provider.FirebaseInitProvider.onCreate(未知来源) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1748) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1723) 在 com.google.firebase.provider.FirebaseInitProvider.attachInfo(未知来源) 在 android.app.ActivityThread.installProvider(ActivityThread.java:5153) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4748) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688) 在 android.app.ActivityThread.-wrap1(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 这个错误我得到`apply plugin: 'com.android.application'

        android 
                 compileSdkVersion 23
                 buildToolsVersion "25.0.2"
                defaultConfig 
               applicationId "com.example.android.supermarket"
                minSdkVersion 19
                targetSdkVersion 23
            versionCode 1
                versionName "1.0"
                 testInstrumentationRunner                                             "android.support.test.runner.AndroidJUnitRunner"
              
            buildTypes 
             release 
                     minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android.txt'),        'proguard-rules.pro'
    

           

                 dependencies 
         compile fileTree(dir: 'libs', include: ['*.jar'])
             androidTestCompile('com.android.support.test.espresso:espresso- core:2.2.2', 
    exclude group: 'com.android.support', module: 'support-annotations'
)

compile 'com.android.support:design:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.google.android.gms:play-services-appindexing:9.8.0'
compile 'com.google.firebase:firebase-auth:10.0.1'
compile 'com.google.firebase:firebase-database:10.0.1'
testCompile 'junit:junit:4.12'
        

应用插件:'com.google.gms.google-services'

【问题讨论】:

分享您的产品类别。另外,如果您遇到异常,请分享 logcat 输出 发布您的错误/异常,更详细地说明问题,制作更具描述性的标题。 异常提示“初始化失败”,您在使用之前是否初始化了 Firebase? @MerveSahin 是的。我有 【参考方案1】:
 mDatabase.child("products").child("KhCm8DZpg72BBXCISCC").addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 

                Product product = dataSnapshot.getValue(Product.class);
                     s="Product Name: "+product.getName();
                          textView.setText(s);    
    

            @Override
            public void onCancelled(DatabaseError error) 

            
        );

【讨论】:

虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案2】:
mDatabase.child("products").addValueEventListener(new ValueEventListener() 
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) 

                    //this loop will iterate through all the available children
                    for(DataSnapshot ds:dataSnpshot.getChildren())
                    
                         Product product = ds.getValue(Product.class);
                         s="Product Name: "+product.getName();
                         textView.setText(s); //this would be overwritten
                        
        

                @Override
                public void onCancelled(DatabaseError error) 

                
            );

现在这将覆盖 TextView 中的文本。您可以将所有产品名称存储在一个数组中,然后在以后使用它,或者您可以通过编程方式创建文本视图,或者您可以使用 RecyclerView 来填充您的数据。

【讨论】:

以上是关于我是火力基地的新手。我无法从 firebase 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

火力基地的错误

auth 有多安全!== null?火力基地

无法连接到火力基地

为啥从 firebase 控制台发送的通知能够绕过 android 后台任务限制? - 反应原生火力基地 -

我必须从哪里找到 DatabaseEvent 类? (颤振)(火力基地)

我无法从 Firebase (Java) 获取特定数据