2016-06-22 18 views
6

Ho un modello con la seguente strutturaSalvataggio e data di recupero in Firebase

public class OfferModel { 
    private String mImageUrl; 
    private String mOfferCode; 
    private String mOfferTitle; 
    private String mOfferDescription; 
    private boolean mIsRunning; 
    private String mCreatorUid; 
    private Date mStartDate; 
} 

Tutto il resto funziona bene sul risparmio. Si risparmia in Firebase base di dati in tempo reale come

startDate 
    date: 22 
    day: 3 
    hours: 23 
    minutes: 20 
    month: 5 
    seconds: 50 
    time: 1466617850476 
    timezoneOffset: -330 
    year: 116 

Ma quando provo a recuperarlo, la data dà il seguente errore -

java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.Date 
at com.localvine.models.OfferModel.<init>(OfferModel.java:37) 
at com.localvine.managers.OfferManager$1.onDataChange(OfferManager.java:62) 
at com.google.android.gms.internal.zzafp.zza(Unknown Source) 
at com.google.android.gms.internal.zzagp.zzSu(Unknown Source) 
at com.google.android.gms.internal.zzags$1.run(Unknown Source) 
at android.os.Handler.handleCallback(Handler.java:615) 

Capisco che Firebase non supporta Java Data oggetto, ma dal momento che li sta salvando in una mappa, come posso recuperare la data da quella mappa? C'è un modo corretto di salvare e recuperare le date in Firebase Android?

risposta

12

È possibile memorizzare la data come una data di epoca. È lungo che tu possa utilizzare il tempo di sistema System.currentTimeMillis(); o utilizzando l'ora del server Firebase con il loro ServerValue.TIMESTAMP. La cosa con la prima opzione è che cambia con i fusi orari e le impostazioni di sistema. Pertanto, se si memorizza la data a lungo, è sufficiente modificare il campo mStartDate a long e utilizzare new Date(long) per ottenere lo Date corrispondente al momento del recupero dell'oggetto.

+0

In realtà, il tempo storico è il numero di secondi dall'1 gennaio 1970 UTC; Quello che stai suggerendo è di usare il numero di millisecondi –

3

Ecco come sono riuscito a memorizzare Date su Firebase utilizzando SimpleDateFormat per convertirlo in una data senza secondi, ore o millisecondi.

public void storeDatetoFirebase() { 

    handler = new Handler(); 

    runnable = new Runnable() { 
     @Override 
     public void run() { 
      handler.postDelayed(this, 1000); 
      try { 
       Date date = new Date(); 
       Date newDate = new Date(date.getTime() + (604800000L * 2) + (24 * 60 * 60)); 
       SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd"); 
       String stringdate = dt.format(newDate); 

       System.out.println("Submission Date: " + stringdate); 
       DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("My_Date"); 
       databaseReference.child("init_date").setValue(stringdate); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    handler.postDelayed(runnable, 1 * 1000); 
} 

e questo è come appare sul Firebase:

Date onFirebase

Speranza che aiuta ..

+0

modo più pulito! thaks –

0

è possibile impostare un oggetto data in Firebase

yourReference.setValue(new Date()); 

E ' funziona, ma

ho notato altro problema con la data, quando ho cambiato il mese manualmente dal db, durante il recupero è il valore rimane come prima

+0

Benvenuti in SO! ma questa non è una risposta da pubblicare, ma invece puoi commentarla :) –

0

Anche se Firebase fa disposizione di sostegno Data tipo di dati, io preferirei salvare data-ora in un formato stringa, perché memorizzandolo come una stringa diventa abbastanza facile recuperarlo.

Per memorizzare la data e l'ora del sistema corrente in un formato stringa appena sotto il codice lo farà.

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
     Date date = new Date(); 
     String strDate = dateFormat.format(date).toString(); 
     myRef.child("datetime").setValue(strDate); 

Ora è possibile utilizzare strDate per archiviare nel firebase o fare qualsiasi cosa si voglia fare con quella stringa.

Problemi correlati