0

My app was OK until recent rebuild due to adding on a few features. But this added on feature is unrelated to the new error (which is weird). I even tried removing the new feature but the error still persist now. It must have come with the new updates of Gradle or android studio.

I've already checked this POJO and modified it in anyway I can, but the error still persist (or the error changes to a different variable on the same java POJO file).

I've also changed the release options on build.gradle to have similar options as debug, but it's still happening.

Based on this similar question: Firebase No properties to serialize found on class

I've tried everything on there (keep class of models in proguard, the @Keep annotation on top of the said POJO model and making all variables to public on the POJO) , but to no avail.

This is my current build.gradle: debug {

        minifyEnabled false
        useProguard false
        ext.enableCrashlytics = false
        debuggable true
        shrinkResources false
        jniDebuggable true
        renderscriptDebuggable false
        pseudoLocalesEnabled false
        zipAlignEnabled true
    }
    release {
        minifyEnabled true
        useProguard false
        debuggable false
        shrinkResources true
        jniDebuggable false
        renderscriptDebuggable false
        pseudoLocalesEnabled false
        zipAlignEnabled true
    }

And this is the affected POJO:

import android.support.annotation.Keep;
import com.google.firebase.firestore.IgnoreExtraProperties;
import com.google.firebase.Timestamp;

@IgnoreExtraProperties
@Keep
public class UIDOrg {
public String Org;
public Timestamp LastEdit;
public String RootCollection;
public Boolean UserRoleDelivery, UserRoleFulfilment, UserRoleOrder, UserRoleVerification, AllowEditOrder, AllowAddOrder;
public Long LocalNotificationReminderTime;

public Long getLocalNotificationReminderTime() {
    return LocalNotificationReminderTime;
}

public Boolean getUserRoleDelivery() {
    return UserRoleDelivery;
}

public Boolean getUserRoleFulfilment() {
    return UserRoleFulfilment;
}

public Boolean getUserRoleOrder() {
    return UserRoleOrder;
}

public Boolean getUserRoleVerification() {
    return UserRoleVerification;
}

public Boolean getAllowEditOrder() {
    return AllowEditOrder;
}

public Boolean getAllowAddOrder() { return AllowAddOrder; }

public String getOrg() {
    return Org;
}

public java.util.Date getLastEdit() {
    return LastEdit.toDate();
}

public String getRootCollection() {
    return RootCollection;
}

public UIDOrg(String org, Timestamp lastEdit, String rootCollection, Boolean userRoleDelivery, Boolean userRoleFulfilment, Boolean userRoleOrder, Boolean userRoleVerification, Boolean allowEditOrder, Boolean allowAddOrder, Long localNotificationReminderTime) {
    Org = org;
    LastEdit = lastEdit;
    RootCollection = rootCollection;
    UserRoleDelivery = userRoleDelivery;
    UserRoleFulfilment = userRoleFulfilment;
    UserRoleOrder = userRoleOrder;
    UserRoleVerification = userRoleVerification;
    AllowEditOrder = allowEditOrder;
    AllowAddOrder = allowAddOrder;
    LocalNotificationReminderTime = localNotificationReminderTime;
}

public UIDOrg() {
}
}

This is the error I get now after building (both bundle and APK) as release:

java.lang.RuntimeException: Found two getters or fields with conflicting case sensitivity for property: allowaddorder
    at d.e.c.f.g.j$a.a(Unknown Source:44)
    at d.e.c.f.g.j$a.<init>(:6)
    at d.e.c.f.g.j.a(Unknown Source:12)
    at d.e.c.f.g.j.a(:16)
    at d.e.c.f.g.j.a(Unknown Source:2)
    at d.e.c.f.g.a(Unknown Source:18)
    at d.e.c.f.g.a(Unknown Source:2)
    at d.f.a.b.a.a(:1)
    at d.e.a.a.l.w.run(:6)
    at android.os.Handler.handleCallback(Handler.java:891)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:7470)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

The error is not the same as "no properties to serialize" but I also got that error earlier when I removed proguard support.

H Wong
  • 331
  • 3
  • 16

1 Answers1

3

Your variables need to be in the camelCase format, then you can do the following:

public class UIDOrg {

        public String org;
        public Timestamp lastEdit;
        public String rootCollection;
        public Boolean userRoleDelivery, userRoleFulfilment, userRoleOrder, userRoleVerification, allowEditOrder, allowAddOrder;
        public Long localNotificationReminderTime;

    public UIDOrg() {
    }

    public UIDOrg(String org, Timestamp lastEdit, String rootCollection, Boolean userRoleDelivery, Boolean userRoleFulfilment, Boolean userRoleOrder, Boolean userRoleVerification, Boolean allowEditOrder, Boolean allowAddOrder, Long localNotificationReminderTime) {
        this.org = org;
        this.lastEdit = lastEdit;
        this.rootCollection = rootCollection;
        this.userRoleDelivery = userRoleDelivery;
        this.userRoleFulfilment = userRoleFulfilment;
        this.userRoleOrder = userRoleOrder;
        this.userRoleVerification = userRoleVerification;
        this.allowEditOrder = allowEditOrder;
        this.allowAddOrder = allowAddOrder;
        this.localNotificationReminderTime = localNotificationReminderTime;
    }

    public String getOrg() {
        return org;
    }

    public void setOrg(String org) {
        this.org = org;
    }

    public Timestamp getLastEdit() {
        return lastEdit;
    }

    public void setLastEdit(Timestamp lastEdit) {
        this.lastEdit = lastEdit;
    }

    public String getRootCollection() {
        return rootCollection;
    }

    public void setRootCollection(String rootCollection) {
        this.rootCollection = rootCollection;
    }

    public Boolean getUserRoleDelivery() {
        return userRoleDelivery;
    }

    public void setUserRoleDelivery(Boolean userRoleDelivery) {
        this.userRoleDelivery = userRoleDelivery;
    }

    public Boolean getUserRoleVerification() {
        return userRoleVerification;
    }

    public void setUserRoleVerification(Boolean userRoleVerification) {
        this.userRoleVerification = userRoleVerification;
    }

    public Boolean getAllowAddOrder() {
        return allowAddOrder;
    }

    public void setAllowAddOrder(Boolean allowAddOrder) {
        this.allowAddOrder = allowAddOrder;
    }

    public Long getLocalNotificationReminderTime() {
        return localNotificationReminderTime;
    }

    public void setLocalNotificationReminderTime(Long localNotificationReminderTime) {
        this.localNotificationReminderTime = localNotificationReminderTime;
    }

    public Boolean getAllowEditOrder() {
        return allowEditOrder;
    }

    public void setAllowEditOrder(Boolean allowEditOrder) {
        this.allowEditOrder = allowEditOrder;
    }

    public Boolean getUserRoleFulfilment() {
        return userRoleFulfilment;
    }

    public void setUserRoleFulfilment(Boolean userRoleFulfilment) {
        this.userRoleFulfilment = userRoleFulfilment;
    }

    public Boolean getUserRoleOrder() {
        return userRoleOrder;
    }

    public void setUserRoleOrder(Boolean userRoleOrder) {
        this.userRoleOrder = userRoleOrder;
    }
}
Peter Haddad
  • 78,874
  • 25
  • 140
  • 134
  • 1
    Thanks for your answer. It works, but now I have to change every field name in my firebase to match the camelCase. – H Wong Jun 09 '19 at 15:17
  • 1
    Question: Why is it only required in this model though? I have like 4 other models that work without camelCase. – H Wong Jun 09 '19 at 15:17
  • 1
    not sure how other models are working but you should always follow the java naming convention https://www.oracle.com/technetwork/java/codeconventions-135099.html so the firebase database can serialize your model – Peter Haddad Jun 09 '19 at 15:30
  • 1
    Got it :-) Got your answer at night at my timezone here. Thanks @PeterHaddad – H Wong Jun 10 '19 at 03:35