【问题标题】:Managing exception in AsyncTask在 AsyncTask 中管理异常
【发布时间】:2016-02-02 03:53:19
【问题描述】:

我有这个代码:

 public void remote(final Backup backup) {
        local(backup);
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                BackupSendInfo sendInfo = new BackupSendInfo()
                        .setFile(getLastBackup()) // <---
                        .setFileName(getBackupName(backup))
                        .setBackup(backup)
                        .setDeviceId(device)
                        .setApp(config.getAppName());
                fileSender.send(sendInfo);
            }
        });
    }

这是getLastBackup方法签名:

private File getLastBackup() throws BackupException;

如您所见,它抛出了BackupException,但我无法在remote 方法签名中添加throws BackuPException 声明,因为它在另一个线程中。

我应该如何处理这种情况? 我希望 remote 方法抛出 BackupException

【问题讨论】:

  • 在 asynctask 方法中捕获异常并抛出它。
  • 我不能。如果我在 AsyncTask 的 catch 中重新抛出它,我会得到同样的错误:必须捕获异常。
  • 谢谢。我喜欢ExceptionAsyncTask 解决方案。

标签: android exception exception-handling android-asynctask


【解决方案1】:

我得到了解决方案。也许,它不是最好的。

我在 AsyncTask 之外得到了lastBackup,这样我就可以声明throws BackupException

 public void remote(final Backup backup) throws BackupException {
        local(backup);
        final File lastBackup = getLastBackup();
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                BackupSendInfo sendInfo = new BackupSendInfo()
                        .setFile(lastBackup)
                        .setFileName(getBackupName(backup))
                        .setBackup(backup)
                        .setDeviceId("Desconocido") //TODO leer dispositivo del fichero deviceName
                        .setApp(config.getAppName());
                fileSender.send(sendInfo);
            }
        });
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多