处理Android自定义内容提供商中的(跨进程)异常

处理Android自定义内容提供商中的(跨进程)异常,android,exception-handling,error-handling,android-contentprovider,Android,Exception Handling,Error Handling,Android Contentprovider,我的Android应用程序中有一个定制的内容提供商,它运行得相当好。我希望其他应用程序也能访问我的内容提供商。我想要一些干净的方式来传达异常和错误,但据我所知,Android内容提供商框架没有提供任何方式来跨进程传播异常 我应该如何向调用方指示异常状态?我是否必须以某种方式将其编码到返回的数据中,并依靠客户机进行检查?还有别的选择吗?如果编码成普通的返回数据,最好的方法是什么?(我可以看到一个查询调用返回的游标有很多选择,但是插入返回的Uri或者更新或者删除返回的int子类又有一个运行时异常子类

我的Android应用程序中有一个定制的内容提供商,它运行得相当好。我希望其他应用程序也能访问我的内容提供商。我想要一些干净的方式来传达异常和错误,但据我所知,Android内容提供商框架没有提供任何方式来跨进程传播异常


我应该如何向调用方指示异常状态?我是否必须以某种方式将其编码到返回的数据中,并依靠客户机进行检查?还有别的选择吗?如果编码成普通的返回数据,最好的方法是什么?(我可以看到一个
查询
调用返回的
游标
有很多选择,但是
插入
返回的
Uri
或者
更新
或者
删除
返回的
int
子类又有一个
运行时异常
子类的简短列表,这些子类,如果在提供程序中抛出,将在客户端应用程序中重新抛出。这些措施包括:

  • IllegalStateException
  • IllegalArgumentException
  • NullPointerException
  • SecurityException
  • BadParcelableException
添加了对
Parcel.writeException
文档的最新更新

  • UnsupportedOperationException
  • NetworkOnMainThreadException
资料来源:提到了
IAE
NPE
;我猜其他人会根据我的想法工作

客户端应用程序将仅获取详细信息,而不是堆栈跟踪或原因堆栈。对于可以编码为
字符串
(详细信息)的异常状态,这是一个合理的选择


我仍然对其他解决方案感兴趣。

当您尝试从
ContentProvider
中引发某种
RuntimeException
时,发生了什么?使用
ContentProviderClient
query
insert
在提供者抛出
运行时都返回
null
。在logcat中,我可以看到一条带有标签的消息
JavaBinder
***未捕获远程异常!(进程间还不支持异常。)
和update在抛出任何异常时返回0(似乎),我最终使用Android将数据编码到
IllegalStateException
的详细消息中,并为客户端提供一个API,以便使用反射将其转换为其他
异常
类。