“不能为 child() 中的参数 'pathString' 传递 null”和其他 Proguard 和 Firebase 问题

Posted

技术标签:

【中文标题】“不能为 child() 中的参数 \'pathString\' 传递 null”和其他 Proguard 和 Firebase 问题【英文标题】:"Can't pass null for argument 'pathString' in child()" and other Proguard and Firebase issues“不能为 child() 中的参数 'pathString' 传递 null”和其他 Proguard 和 Firebase 问题 【发布时间】:2017-01-25 06:18:09 【问题描述】:

我对 Proguard 和 Firebase 束手无策。 Proguard 似乎在my Play Store app 的发布版本出现问题后引起问题。

这是我的 proguard-rules.pro 文件中当前的内容:

-keepattributes Signature

-keepclassmembers class com.test.finalapp.models.**  *;


-keep class com.test.finalapp.viewholders.**  *; 

-dontwarn android.support.v7.**
-keep class android.support.v7.**  *; 
-keep interface android.support.v7.**  *; 

-keepattributes *Annotation*
-keepclassmembers class ** 
    @org.greenrobot.eventbus.Subscribe <methods>;

-keep enum org.greenrobot.eventbus.ThreadMode  *; 

-keepclassmembers class **  public void onEvent*(**); 

我正在使用 FirebaseUI RecyclerView 适配器,并且该适配器的 viewholder 类位于 viewholders 包名称中。这就是 proguard-rules.pro 文件中的那一行的用途。

附带问题:大小写在 proguard-rules 文件中是否重要?如果我的包被命名为“Viewholders”,那么“com.test.finalapp.viewholders”中的viewholders应该大写吗?

无论如何,这是我无法弄清楚的最新 logcat 错误:

09-16 16:16:46.899 882-882/? E/UncaughtException: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
                                                      at com.google.firebase.database.g.a(Unknown Source)
                                                      at com.test.finalapp.Activities.PreMainActivities.c.a(Unknown Source)
                                                      at com.google.firebase.database.p.a(Unknown Source)
                                                      at com.google.android.gms.c.ha.a(Unknown Source)
                                                      at com.google.android.gms.c.iv.b(Unknown Source)
                                                      at com.google.android.gms.c.jb.run(Unknown Source)
                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                      at android.os.Looper.loop(Looper.java:152)
                                                      at android.app.ActivityThread.main(ActivityThread.java:5507)
                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-16 16:16:47.102 882-882/? D/FirebaseCrashApiImpl: throwable java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()

                                                     --------- beginning of crash
09-16 16:16:47.141 882-882/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.test.finalapp, PID: 882
                                               java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
                                                   at com.google.firebase.database.g.a(Unknown Source)
                                                   at com.test.finalapp.Activities.PreMainActivities.c.a(Unknown Source)
                                                   at com.google.firebase.database.p.a(Unknown Source)
                                                   at com.google.android.gms.c.ha.a(Unknown Source)
                                                   at com.google.android.gms.c.iv.b(Unknown Source)
                                                   at com.google.android.gms.c.jb.run(Unknown Source)
                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                   at android.os.Looper.loop(Looper.java:152)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5507)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我不知道 ""Can't pass null for argument 'pathString' in child()" 是什么意思,也不知道要调整什么来解决这个问题。想法?在发布这个问题之前,我在网上找不到任何解决方案...

【问题讨论】:

同样的问题 :( 【参考方案1】:

我注意到在 Android Studio Watches 窗口中放置变量时,其中一个是这样的静态引用,因此 StreetsId.PUSH_ID

country + "/"+ FirebaseManager.STREET_ADDRESS +"/"+ snapshot.child(StreetsId.PUSH_ID).getValue()

Watches 窗口确实在 Android Studio 调试器控制台窗口中生成了该错误消息。

【讨论】:

以上是关于“不能为 child() 中的参数 'pathString' 传递 null”和其他 Proguard 和 Firebase 问题的主要内容,如果未能解决你的问题,请参考以下文章