2016-06-22 11 views
0

Gibt es eine Möglichkeit, eine neue Instanz von DatabaseError Objekt zu generieren?Wie erstellt man eine neue DatabaseError-Instanz in Firebase?

Edit:

Ich verwende eine Klasse die ValueEventListener, in der Umsetzung Ich mag würde eine Ausnahme und Strecke der Fehler durch onCancelled(DatabaseError databaseError) Methode zu fangen.

public class StandardSingleValueListener<T> implements ValueEventListener { 

    protected Class<T> mTypeClass; 

    public StandardSingleValueListener(Class<T> typeClass){ 
     mTypeClass = typeClass; 
    } 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     T result = null; 
     try { 
      result = parseMethod(dataSnapshot); 
     } catch (Exception e) { 
      onCancelled(new DatabaseError(e.toString()); // I'd like to create the error here 
      return; 
     } 
     // process result 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // process databaseError 
    } 

    protected T parseMethod(DataSnapshot snap){ 
     return snap.getValue(mTypeClass); 
    } 
} 

Wo parseMethod manchmal außer Kraft gesetzt wird und mTypeClass ist die Klasse der T.

DatabaseError.fromException(e); 

Aber ich bin nicht sicher, dass es hier eine gute Idee:

+0

Ihr Code sollte niemals * einen * DatabaseError erstellen * müssen. Das klingt nach einem [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Es ist wahrscheinlich einfacher zu helfen, wenn Sie beschreiben, was Sie erreichen wollen, indem Sie uns einen Kontext (und idealerweise einen [MCVE] (http://stackoverflow.com/help/mcve)) für den Anwendungsfall geben. –

+0

@FrankvanPuffelen Ich habe einen Anwendungsfall hinzugefügt – Voy

Antwort

2

können Sie ein DatabaseError from the exception mit erstellen. Der Fehler, den Sie signalisieren, ist ein Fehler auf Anwendungsebene. Wenn Sie es als DatabaseError anheben, führt dies zu Verwirrung für diejenigen, die den Code nach Ihnen pflegen.

+0

würden Sie daher vorschlagen, in diesem Fall meinen eigenen Fehlertyp zu erstellen, sagen ParseError? Oder wickeln Sie DatabaseError innerhalb meines eigenen Fehlertyps? – Voy

+0

Ich frage mich nur, warum Sie die Ausnahme fangen, die von 'parseMethod()' ausgelöst werden kann, um dann nur eine weitere Ausnahme für die gleiche Fehlerbedingung auszulösen. Warum nicht einfach unmodifiziert durchgehen lassen? –

+0

Ich behandle die datenbankbezogenen Fehler im Code nach dem onCanceled() Callback. Da parseMethod() verwendet wird, um das Abrufen von Daten aus Firebase (z. B. Sortieren, Filtern) zu verfeinern, machte es für mich Sinn, den Fehler ähnlich wie Firebases DatabaseError zu behandeln. Ich bin mir nicht sicher, ob ich eine weitere Ausnahme mache, wie Sie es vorschlagen. Nach dem Abfangen von parseMethod() erstelle ich ein nicht-reduzierbares Error-Objekt, so dass ich es überprüfen und in onCancelled() verarbeiten konnte. So wie ich nach Firebase-Fehlern suchen und diese verarbeiten würde, die an onCancelled() übergeben wurden – Voy

Verwandte Themen