2016-11-22 3 views
-1

verfolge ich ein Beispiel für die beliebte Ion-Bibliothek, die Koush erstellt: Download a File with a progress bar und ich kann von one of his samples sehen, dass es möglich ist, eine Stornierung downloading.cancel() mit zu senden.Koush Ion OnCompleted Rückruf - Griff CancellationException

Anm .: downloading wurde als Future<File> deklariert.

Wenn die Methode cancel() aufgerufen wird, wird eine CancellationException ausgelöst. Ich möchte diese Ausnahme speziell behandeln, anstatt sie allgemein zu erfassen.

Mein erster Gedanke ist es, einen try/catch-Block wickeln, und verwenden Sie so etwas wie:

try { 
    //... 
} catch (CancellationException ce) { 
    //... 
} 

Doch wenn man sich his example anschauen, werden Sie sehen, dass die OnCompleted Rückruf verwendet 2 Eingänge: Exception e und File result.

Die Probe here (line 72) zeigt dies:

if (e != null) { 
    Toast.makeText(ProgressBarDownload.this, "Error downloading file", Toast.LENGTH_LONG).show() 
    return; 
} 

Dies ist eine Alternative zu einem try/catch-Block zu sein scheint, die einen Fehler zu verallgemeinern, wenn eine Ausnahme vorliegt. Allerdings möchte ich eine andere Toast-Nachricht zurückgeben, wenn die CancellationException abgefangen wurde.

+0

Sie haben benutzerdefinierte Ausnahme zu schreiben. – Radhey

Antwort

1

Um Ausnahmen einzeln behandeln zu können, können wir in der Instanz der geworfenen Ausnahme e nach dem Ausnahmetyp suchen.

Dies ist die Lösung, die für mich funktioniert:

if (e instanceof CancellationException) { 
    //CancellationException was found 
}