我的Android应用中有一个自定义内容提供商,效果相当不错。我希望其他应用也可以访问我的内容提供商。我想要一些干净的方式来传达异常和错误,但据我所知,Android内容提供程序框架没有提供任何方法来跨进程传播异常。
我应该如何向来电者指明异常状态?我是否必须以某种方式将其编码为我的返回数据并依赖客户端进行检查?还有其他选择吗?如果将编码转换为普通的返回数据,那么最好的方法是什么? (我可以看到Cursor
调用返回的query
的一些替代方案,但Uri
返回的insert
或int
返回的内容如何? update
或delete
?)
答案 0 :(得分:15)
有一个RuntimeException
子类的简短列表,如果在提供程序中抛出,将在客户端应用程序中重新抛出。其中包括:
IllegalStateException
IllegalArgumentException
NullPointerException
SecurityException
BadParcelableException
添加了Parcel.writeException
文档的最新更新
UnsupportedOperationException
NetworkOnMainThreadException
来源:Creating Content Providers提及IAE
和NPE
;我猜他们其他人的工作基于the Javadoc for Parcel.writeException
。
客户端应用程序只会获取详细消息,而不是堆栈跟踪或原因堆栈。对于可以编码为String
(详细消息)的异常状态,这是一个合理的选择。
我也对其他解决方案感兴趣。