Ich werde Ihnen zeigen, wie Sie die in Java7 hinzugefügte Anweisung ** try-with-resources ** verwenden, um kurz den Vorgang des Schließens des Cursors zu schreiben, der beim Abrufen von Werten aus der Datenbank verwendet wird.
try (Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null)) {
... // (Verarbeitung mit Cursor)
}
Wenn Sie den Code schreiben, um die Daten vom Inhaltsanbieter mithilfe der Anweisung try-with-resources abzurufen, erhalten Sie den obigen Code.
Weil die Anweisung try-with-resources beim Verlassen des Blocks innerhalb des Versuchs automatisch die Methode Cursor # close () aufruft. Sie müssen close () nicht mehr explizit aufrufen.
Wenn Sie den Code mit der Anweisung try-finally schreiben, ohne die Anweisung try-with-resources zu verwenden, sieht dies wie folgt aus.
Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null);
try {
... // (Verarbeitung mit Cursor)
} finally {
if (c != null) {
c.close()
}
}
Der Code wird länger, wenn Sie die finally-Klausel schreiben. Außerdem müssen Sie vor dem Schließen überprüfen, ob der Cursor nicht null ist Zusätzlich zur Verlängerung des Codes besteht die Gefahr, dass das Nullurteil vergessen wird und NPE verursacht wird.
Ein weiteres Beispiel, das die Anweisung try-with-resources nicht verwendet, ist Code, der nicht einmal die Anweisung try verwendet:
Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null);
... // (Verarbeitung mit dem Cursor) ★
if (c != null) {
c.close()
}
Das Problem beim Schreiben ist, dass der Cursor nicht geschlossen wird, wenn am Stern eine Ausnahme auftritt. Daher ist es besser, dies zu vermeiden.
Wenn Sie den Cursor verwenden, sollten Sie ihn in eine Try-with-Resources-Anweisung schreiben. Sie müssen sich keine Sorgen um den langwierigen Prozess machen, und es scheint sich um einen prägnanten Code zu handeln.
Recommended Posts