Je vais vous montrer comment utiliser l'instruction ** try-with-resources ** ajoutée dans Java7 pour écrire brièvement le processus de fermeture du curseur utilisé lors de la récupération des valeurs de la base de données.
try (Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null)) {
... // (Traitement à l'aide du curseur)
}
Si vous écrivez le code pour obtenir les données du fournisseur de contenu à l'aide de l'instruction try-with-resources, vous obtiendrez le code ci-dessus.
Parce que l'instruction try-with-resources appelle automatiquement la méthode Cursor # close () lors de la sortie du bloc à l'intérieur de try. Vous n'avez plus besoin d'appeler explicitement close ().
Si vous écrivez le code avec l'instruction try-finally sans utiliser l'instruction try-with-resources, ce sera comme suit.
Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null);
try {
... // (Traitement à l'aide du curseur)
} finally {
if (c != null) {
c.close()
}
}
Le code sera plus long lorsque vous écrivez la clause finally. De plus, comme vous devez vérifier que le curseur n'est pas nul, puis le fermer, En plus d'allonger le code, il y a un risque d'oublier le jugement nul et de provoquer NPE.
Un autre exemple de non-utilisation de l'instruction try-with-resources est le code qui n'utilise même pas l'instruction try, comme ceci:
Cursor c = contentResolver.query(uri, projection, selection, selectionArgs, null);
... // (Traitement à l'aide du curseur) ★
if (c != null) {
c.close()
}
Le problème avec cette écriture est que le curseur ne sera pas fermé si une exception se produit au niveau de l'étoile. Par conséquent, il vaut mieux l'éviter.
Lorsque vous utilisez le curseur, je pense que vous devriez l'écrire dans une instruction try-with-resources. Vous n'avez pas à vous soucier du processus fastidieux, et cela semble être un code concis.
Recommended Posts