11

Tengo un proveedor de contenido personalizado en mi aplicación de Android que funciona razonablemente bien. Espero que otras aplicaciones también accedan a mi proveedor de contenido. Me gustaría alguna forma limpia de comunicar excepciones y errores, pero hasta donde puedo decir, el marco del proveedor de contenido de Android no proporciona ninguna forma de propagar excepciones entre los procesos.Manejo de excepciones (de proceso cruzado) en el proveedor de contenido personalizado de Android

¿Cómo debo indicar un estado de excepción a mi interlocutor? ¿Tengo que codificarlo de alguna manera en mis datos devueltos y confiar en los clientes para verificarlo? ¿Hay alguna alternativa? Si es la codificación en los datos de retorno ordinarios, ¿cuál es la mejor manera? (Puedo ver una serie de alternativas para la Cursor devuelto por una llamada query, pero ¿y el Uri devuelto por insert, o la int devuelto por update o delete?)

+0

Cuando intentó subir algún tipo de 'RuntimeException' de su' ContentProvider', ¿qué pasó? – CommonsWare

+0

El uso de 'ContentProviderClient',' query' e 'insert' devuelve' null' cuando el proveedor arroja 'RuntimeException'. En el logcat puedo ver un mensaje con la etiqueta 'JavaBinder':' *** ¡Excepción remota no detectada! (Todavía no se admiten excepciones en todos los procesos) ' –

Respuesta

14

Hay una lista corta de RuntimeException subclases que, si se lanza en el proveedor, se volverá a lanzar en una aplicación cliente. Estos son:

  • IllegalStateException
  • IllegalArgumentException
  • NullPointerException
  • SecurityException
  • BadParcelableException

Fuente: Creating Content Providers menciona IAE y NPE; Supuse que los demás trabajarían basados ​​en the Javadoc forParcel.writeException.

La aplicación del cliente solo recibirá el mensaje de detalle, no un rastreo de pila o la pila de causas. Para un estado excepcional que se puede codificar en un String (el mensaje de detalle), esta es una opción razonable.

Todavía estoy interesado en otras soluciones, también.

+0

Terminé usando el [paquete org.json] de Android (http://developer.android.com/reference/org/json/package-summary.html) para codificar datos en el mensaje de detalle de una 'IllegalStateException', y proporciona una API para que los clientes traduzcan utilizando la reflexión en otras clases' Exception'. –