Soy nuevo en el entorno de Android y he comenzado a escribir algunos códigos para ejecutar algunas consultas en una base de datos. Cuando tengo que manejar excepciones, no sé cuál es la forma adecuada de hacerlo: de Android solía usar la declaración throws
sobre métodos, pero parece que throws
no está permitido en Android? ¿Solo try-catch
? Digo esto porque eclipse no sugiere que agregue throws
declaración como cuando estoy fuera del entorno de Android, supongo que está relacionado con extends Activity
. Entonces, ¿cuál es la forma apropiada de manejar excepciones en android? Rodeando cada oración con try-catch
mi código se ve terrible y eso no es realmente lo que quiero hacer.Evita try/catch en Android
Respuesta
La razón por la que no puedes "agregar los lanzamientos en Android a través de eclipse" es porque no eres la persona que define las interfaces o las súper clases. Si desea agregar una excepción a la firma del método (como usted dice que hace normalmente), también debe agregarse a la interfaz y usted no puede controlarla, por lo que no puede modificarla.
ejemplo, el método
protected void onCreate (Bundle savedInstanceState);
la que se anula la actividad, si desea lanzar una excepción tendría que ser cambiado a la firma del método (por ejemplo)
protected void onCreate (Bundle savedInstanceState) lanza MiExcepción;
pero también debería cambiar dónde se define onCreate, que está en la clase Activity, y esa es una clase que no puede cambiar (porque la proporciona la biblioteca android).
Por lo tanto, su única opción es atrapar la excepción y hacer algo con ella (o simplemente ignorarla). Se podría hacer un brindis para mostrar el errror
catch (Exception e) {
Toast toast = Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT);
toast.show();
}
Si el método que está utilizando ya se produce una excepción, es posible que desee simplemente volver a producir la excepción, ya que el nuevo tipo:
public void someMethod() throws IOException {
try {
// Do database operation
} catch (MyException e){
throw new IOException(e.toString());
}
}
// Or, if there is no exception, use an unchecked exception:
public void otherMethod() {
try {
// DB operation
} catch (MyException e){
throw new RuntimeException(e);
}
}
El Otra opción es hacer que MyException
extienda RuntimeException
. Entonces el compilador no lo forzará a atraparlo o agregarlo a la firma del método. Las excepciones RuntimeExceptions se conocen como excepciones sin marcar, lo que significa que no tiene que comprobar que se produzcan mediante try/catch. Ejemplos de estos son NullPointer
y ArrayOutOfBounds
.
Me preguntaba sobre algún extraño manejo de "throws" en el entorno de Android y encontré esta vieja pregunta aquí. Asker Jon "comenzó a escribir código para ejecutar algunas consultas en una base de datos", por lo que tal vez notó lo mismo que yo.
Esto compila sin error:
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DbMeta.T_DISGUISED.T_CREATE);
}
pesar de esta declaración (en el emergente javadoc):
void android.database.sqlite.SQLiteDatabase.execSQL(String sql) throws SQLException
Así que, primero, monkjack es correcto cuando señala que la firma onCreate
del método no puede ser cambiado al heredar implementaciones. Y segundo, Zeki indica correctamente la diferencia entre las excepciones marcadas y no marcadas.
Y ahora tercero, quiero agregar que la gran confusión es causada por SQLException
.
La SQLException
utilizada en el ejemplo anterior es Android tipo android.database.SQLException
y hereda java.lang.RuntimeException
- ¡es una excepción no comprobada! No se requiere declaración de tiro !!!
Ese no es el clásico java.sql.SQLException
- que es un java.lang.Exception
y requiere try/catch/throws.
- 1. tryCatch y ggplot
- 2. Uso de tryCatch y fuente
- 3. pros y contras de TryCatch versus TryParse
- 4. cargar un archivo de datos en R utilizando TryCatch
- 5. Agregar un proyecto de biblioteca Android a un proyecto de Android evita que Ant construya
- 6. ¿Evita el parpadeo en Windows Forms?
- 7. LaTeX: ¿evita el nuevo párrafo?
- 8. SQL INSERT pero evita duplicados
- 9. Evita imprimir la última coma
- 10. ¿Evita la pérdida de datos debido a la interrupción al guardar archivos en android?
- 11. HTML5 Canvas evita cualquier representación de subpíxeles
- 12. Evita printStackTrace(); utilizar una llamada registrador lugar
- 13. ¿Evita la JVM las optimizaciones de cola?
- 14. Javascript: anula o evita la ejecución
- 15. Evita temporalmente que se apague Linux
- 16. ¿Evita que MacPorts instale un paquete preconstruido?
- 17. ¿Evita que emacs mezcle pestañas y espacios?
- 18. Spring (MVC) ¿Evita la inyección de SQL?
- 19. ¿Evita la ejecución mutuamente recursiva de desencadenantes?
- 20. ¿Cómo evita LINQ-To-SQL Inyecciones SQL?
- 21. cameraOverlayView evita la edición con allowsEditing
- 22. ¿Evita que ciertas propiedades se actualicen?
- 23. ¿Evita que vim abra archivos binarios accidentalmente?
- 24. ¿Cómo evita PHP recurrencia infinita aquí?
- 25. ¿ReadyStatement evita la inyección de SQL?
- 26. Tocar en UISlider evita el desplazamiento de UIScrollView
- 27. ¿Evita las pérdidas de memoria en las devoluciones de llamada?
- 28. Subversion: ¿evita que se realicen modificaciones locales en un archivo?
- 29. ¿Maximiza y evita el cambio de tamaño en un JFrame?
- 30. Intellij, evita que aparezcan mensajes en make build
¿Está hablando de anular/implementar métodos? Y ese "código terrible" solo significa que estás preparado para todas las situaciones posibles. Ah, por cierto: para 'RuntimeException' y sus subclases, no necesita" throws ". – thejh
Android usa lenguaje Java, por lo que el manejo de excepciones es EL MISMO que en cualquier otro proyecto de Java. También es difícil adivinar su caso, por lo que probablemente podría ser más específico en su pregunta, p. podría dar una muestra de código para resaltar su problema. Creo que puede explicarse adecuadamente para usted entonces. –
Lo que dijo Arhimed. Ver http://download.oracle.com/javase/tutorial/essential/exceptions/index.html – MatrixFrog