2017-02-24 34 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選項對我無效。

有可能是一個解決方案,可以讓其他類的混淆,我只是不需要它,所以這對我工作。

相關問題