java - 如何处理 AsyncTask 失败

标签 java android

是否有特定的方法来处理 AsyncTask 中的失败?据我所知,唯一的方法是使用任务的返回值。如果可能的话,我希望能够提供有关失败的更多详细信息,并且 null 不是很冗长。

理想情况下,它会提供一个 onError 处理程序,但我认为它没有。

class DownloadAsyncTask extends AsyncTask<String, Void, String> {

    /** this would be cool if it existed */
    @Override
    protected void onError(Exception ex) {
        ...
    }

    @Override
    protected String doInBackground(String... params) {
    try {
            ... download ...
        } catch (IOException e) {
            setError(e); // maybe like this?
        }
    }       
}

最佳答案

您可以简单地将异常保存在一个字段中并在 onPostExecute() 中检查它(以确保任何错误处理代码都在 UI 线程上运行)。像这样的东西:

new AsyncTask<Void, Void, Boolean>() {
    Exception error;

    @Override
    protected Boolean doInBackground(Void... params) {
        try {
             // do work
             return true;
        } catch (Exception e) {
            error = e;

            return false;
        } 
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            Toast.makeText(ctx, "Success!",
                Toast.LENGTH_SHORT).show();
         } else {
            if (error != null) {
                Toast.makeText(ctx, error.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
        }
    }

关于java - 如何处理 AsyncTask 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133003/

相关文章:

android - 错误 :(232) Ignore: Unknown issue id "InlineApi"

java - android后台服务中的位置监听器

java - 未找到 hibernate 表

java - LSOF 命令不显示 java 和类文件

java - 使用 WordNet 时出现 ExceptionInInitializerError

android - 如何解决可恢复的协议(protocol)解码器异常:the line is too long in android

Android getBestProvider 从不返回 GPS

java - Eclipse Luna - 项目未显示 - 奇怪

java - 使用 Hibernate 向 MySQL 插入数据时出错

java - 构建项目时实现新依赖项时,在模块classes.jar中发现重复的类