在doInBackground中抛出异常并捕获onPostExecute

时间:2014-10-02 13:06:31

标签: android android-asynctask

我从doInBackground的{​​{1}}方法中抛出错误。可能吗?我怎样才能使Asynctask

抓住异常

3 个答案:

答案 0 :(得分:9)

您不能跨线程抛出异常。

但是,您可以在doInBackground()中捕获异常,将其存储在asynctask中的成员变量中,然后在onPostExecute()中处理它。

答案 1 :(得分:1)

不,你不能在后台线程中抛出异常。

更好的方法是将后台线程返回的结果(,如果它的异常消息然后让它为)传递给onPostExecute()方法,然后根据方法处理结果需要。

答案 2 :(得分:1)

您可以通过以下三种方法之一来完成此操作:

  1. 将异常存储为AsyncTask子类的局部变量,并按照laaltoPeter Pei Guo的建议,在onPostExecute()方法中检查它。您可以查询它的类类型,并根据异常类型执行不同的任务。 AsyncTask保证这样做是线程安全的。

  2. 将通用结果类型更改为Object并从doInBackground()方法返回异常或结果,然后在{{1}中检查结果对象的类类型方法,并在适当时强制转换和处理它。这主要是onPostExecute()FutureTask在内部使用)实现它的AsyncTask方法的方式,尽管它将它的状态存储在局部变量中,因为它可以&# 39; t依赖于结果类型。

  3. 为结果创建一个holder类,可以构造为包含结果或某些特定的异常,定义它的get方法返回结果类型(如果可用)并抛出异常,然后设置您的get()子类对该类的通用结果类型,并在从持有者处获得结果时捕获AsyncTask方法中的异常。