title: Android Firebase: invalid case sensitive name
body: <p>I am trying to add a Track type object into the firebase DB which has an ArrayList of Checkpoint type objects. </p>
  
  <pre><code>ssDB.child("tracks").child(trackKey).setValue(newTrack)
  </code></pre>
  
  <p>But I am getting an error:</p>
  
  <pre><code>03-25 09:35:38.293 9189-9189/com.illbirdstudios.illbird.streetsend E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.illbirdstudios.illbird.streetsend, PID: 9189
   com.google.firebase.database.DatabaseException: Found setter with invalid case-sensitive name: setCheckpoints
       at com.google.android.gms.internal.zzelx.&lt;init&gt;(Unknown Source:403)
       at com.google.android.gms.internal.zzelw.zzf(Unknown Source:12)
       at com.google.android.gms.internal.zzelw.zzb(Unknown Source:756)
       at com.google.android.gms.internal.zzelw.zza(Unknown Source:0)
       at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
       at com.illbirdstudios.illbird.streetsend.CreateTrackActivity2$1$1.onDataChange(CreateTrackActivity2.java:174)
       at com.google.firebase.database.zzp.onDataChange(Unknown Source:7)
       at com.google.android.gms.internal.zzegf.zza(Unknown Source:13)
       at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source:2)
       at com.google.android.gms.internal.zzeig.run(Unknown Source:65)
       at android.os.Handler.handleCallback(Handler.java:789)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6541)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
  </code></pre>
  
  <p>Here is my Track Class</p>
  
  <pre><code>public class Track {
  
      private String trackOwner;
      private String trackName;
  
      public final static String POINTTOPOINT = "POINTTOPOINT";
      public final static String CIRCUIT = "CIRCUIT";
  
      private String trackType;
      private ArrayList&lt;Checkpoint&gt; checkpoints;
  
      public Track(String trackOwner, String trackName, String trackType){
  
          this.trackOwner = trackOwner;
          this.trackName = trackName;
          this.trackType = trackType;
          checkpoints = new ArrayList&lt;Checkpoint&gt;();
  
      }
  
      public Track(){
  
      }
  
      public String getTrackOwner(){
          return this.trackOwner;
      }
  
      public String getTrackName(){
          return this.trackName;
      }
  
      public String getTrackType(){
          return this.trackType;
      }
  
      public void setCheckpoints(ArrayList&lt;Checkpoint&gt; checkpoints){
          this.checkpoints = checkpoints;
      }
  
      public void addCheckPoint(Checkpoint checkpoint){
          checkpoints.add(checkpoint);
      }
  
      public ArrayList&lt;Checkpoint&gt; getCheckPoints(){
          return this.checkpoints;
      }
  }
  </code></pre>
  
  <p>When I try adding each of the Track items seperatly through child calls to the database, it works:</p>
  
  <pre><code>Log.d("Saving Track", "Track Name");
  ssDB.child("tracks").child(trackKey).child("trackName").setValue(newTrack.getTrackName());
  Log.d("Saving Track", "Track Owner");
  ssDB.child("tracks").child(trackKey).child("trackOwner").setValue(newTrack.getTrackOwner());
  Log.d("Saving Track", "Track Type");
  ssDB.child("tracks").child(trackKey).child("trackType").setValue(newTrack.getTrackType());
  Log.d("Saving Track", "Track Checkpoints");
  ssDB.child("tracks").child(trackKey).child("checkpoints").setValue(newTrack.getCheckPoints());
  </code></pre>
  
  <p>But not when I set the value as the object itself.</p>
  
  <pre><code>ssDB.child("tracks").child(trackKey).setValue(newTrack)
  </code></pre>