2015-11-02 49 views
0

管理例外,我有这样的代码:中的AsyncTask

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,但我不能添加throws BackuPException delcaration在remote方法签名中,因为它在另一个线程中。

我该如何处理这种情况? 我想要remote方法抛出BackupException

+0

在asynctask方法中捕获异常并抛出它。 –

+0

我不能。如果我在AsyncTask的catch中重新抛出它,我会得到相同的错误:必须捕获异常。 –

+0

这可以帮助你:http://stackoverflow.com/a/6312491/4596556 –

回答

0

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

我在外面看到lastBackup AsyncTask,这样我可以声明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); 
      } 
     }); 
    }