1

so Im at a dead end here.. I've tried to look at other posted problems/solutions and none have seemed to help me yet...

So I have built an Android app using Firebase. Till today, everything has been fine and I have been able to log users in.

All of a sudden (after some time working on the iOS and Web app), I come back to my Android app and find that its crashing on launch (and I am deducing its happening when it fetches my User's data)

I am getting the following stack trace, and I sadly cant make much sense of where the actual issue is..

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)

The only clue I can take from all that is at com.google.firebase.database.DataSnapshot.getValue(Unknown Source), which makes me think its happening in my code at..

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);
}

The next biggest mystery is that this is ONLY happening in my release build. I then added the debuggable true value to my release build, but when doing so the issue does NOT happen (it doesnt crash).

So theres something about my release build and when its not in debug mode which is causing this issue all of a sudden... and not sure why.

Regarding my User class, it is its own class in my project..

enter image description here

And this is my Proguard file...

-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

Any ideas? Thanks! :)

3
  • 2
    You need to edit the proguard file to not minify your code. Commented Feb 24, 2017 at 22:58
  • thanks for the super quick reply @cricket_007 ! Ive added my progaurd file to the original post... is there something im doing wrong there? Commented Feb 24, 2017 at 23:04
  • Considering the error has com.myapp.android.c, it seems you're not "keeping" some class in that package. Commented Feb 25, 2017 at 0:30

1 Answer 1

1

Looks like the problem occurs because after Proguard obfuscates your classes, Firebase can't find the class to get value from the database (with dataSnapshot.getValue(YourClass.class);). I had the same problem, and I eventually fixed it with adding

-dontobfuscate

option to proguard-rules.pro. For some reason -keep option didn't work for me.

There's probably a solution that will allow to keep obfuscation for the rest of the classes, I just don't really needed it, so this worked for me.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.