2017-02-24 32 views
1

所以我在这里死了..我试着看看其他问题/解决方案和没有似乎帮助我呢...致命异常:com.google.firebase.database.d:com.myapp.android.c类缺少一个没有参数的构造函数

所以我已经建立了一个使用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 

任何想法? 谢谢! :)

+2

您需要编辑proguard文件以不缩小您的代码。 –

+0

感谢超级快速回复@ cricket_007!我添加了我的progaurd文件到原来的帖子...有没有在那里做错了吗? – Simon

+0

考虑到错误是'com.myapp.android.c',看起来你并没有“保留”该包中的某些类。 –

回答

1

看起来像是问题发生,因为在Proguard混淆您的类之后,Firebase无法找到要从数据库获取值的类(使用dataSnapshot.getValue(YourClass.class);)。我有同样的问题,我最终与添加

-dontobfuscate 

选项proguard-rules.pro固定它。由于某种原因,-keep选项对我无效。

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

相关问题