致命异常:com.google.firebase.database.d:类com.myapp.android.c缺少没有参数的构造函数

时间:2017-02-24 22:52:56

标签: android firebase firebase-realtime-database

所以我在这里死路一条..我试着看看其他发布的问题/解决方案,似乎没有人帮助我......

所以我使用Firebase构建了一个Android应用。 直到今天,一切都很好,我已经能够登录用户。

突然(在iOS和Web应用程序上运行一段时间后),我回到我的Android应用程序,发现它在启动时崩溃(我在推送其用户数据时推断其发生)

我得到了以下堆栈跟踪,遗憾的是我无法理解实际问题的位置..

Fatal Exception: com.google.firebase.database.d: Class com.myapp.android.c is missing a constructor with no arguments
   at com.google.android.gms.internal.zzbqi$zza.zzjs(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzjs(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaz(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaw(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzjs(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzjs(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaz(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaw(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaw(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzjs(Unknown Source)
   at com.google.android.gms.internal.zzbqi$zza.zzjs(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaz(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zza(Unknown Source)
   at com.google.android.gms.internal.zzbqi.zzaw(Unknown Source)
   at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
   at com.myapp.android.FirebaseHelper$1.onDataChange(Unknown Source)
   at com.google.firebase.database.Query$1.onDataChange(Unknown Source)
   at com.google.android.gms.internal.zzbmz.zza(Unknown Source)
   at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
   at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
   at android.os.Handler.handleCallback(Handler.java:815)
   at android.os.Handler.dispatchMessage(Handler.java:104)
   at android.os.Looper.loop(Looper.java:207)
   at android.app.ActivityThread.main(ActivityThread.java:5728)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

我可以从所有at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)获取的唯一线索,这让我认为它发生在我的代码中......

public void getUserData(final Boolean autoLogin, final Boolean fromGoogleSignIn) {
    mDatabase = FirebaseDatabase.getInstance().getReference();
    final DatabaseReference userRef = mDatabase.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid());

    ValueEventListener userListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if (dataSnapshot.getValue() == null) {
                // Create User Data
            } else {
                sharedInstance().currentUser = dataSnapshot.getValue(User.class); // <-- Crashing here??
            }
        }
    };

    userRef.addListenerForSingleValueEvent(userListener);
}

下一个最大的谜团是,这只发生在release版本中。 然后我将debuggable true值添加到我的release版本中,但是这样做时问题不会发生(它不会崩溃)。

所以关于我的发布版本以及当它不处于调试模式时会突然导致这个问题...并且不确定原因。

关于我的User类,它是我项目中自己的类..

enter image description here

这是我的Proguard档案......

-dontwarn com.squareup.okhttp.**
-keepattributes Signature

-keep class com.myapp.android.User  { *; }
-keep class com.myapp.android.Vendor { *; }
-keep class com.myapp.android.Response { *; }
-keep class com.myapp.android.Voucher { *; }

-assumenosideeffects class android.util.Log {
   public static *** d(...);
}

-dontpreverify

有什么想法吗? 谢谢! :)

1 个答案:

答案 0 :(得分:1)

看起来问题出现是因为在Proguard对您的类进行模糊处理后,Firebase无法找到要从数据库中获取值的类(使用dataSnapshot.getValue(YourClass.class);)。我有同样的问题,我最终通过添加

修复了它
-dontobfuscate
proguard-rules.pro的

选项。出于某种原因,-keep选项对我不起作用。

可能有一个解决方案可以让其他类保持混淆,我只是不需要它,所以这对我有用。