2014-03-03 72 views
5

您認爲如何從IO異常中檢測到404?我只能搜索「404」的錯誤消息,但這是正確的方式?什麼更直接?如何檢測來自IO異常的404響應代碼?

import com.google.api.services.drive.model.File; 
    import com.google.api.services.drive.Drive.Files.Update; 
    import com.google.api.services.drive.Drive; 


    File result = null; 

    try { 

     update = drive.files().update(driveId, file , mediaContent); 
     update.setNewRevision(true); 

     result = update.execute(); 

    } catch (IOException e) { 

     Log.e(TAG, "file update exception, statusCode: " + update.getLastStatusCode()); 
     Log.e(TAG, "file update exception, e: " + e.getMessage()); 

    } 

Log.e(TAG, "file update exception, statuscode " + update.getLastStatusCode()); 

03-03 05:04:31.738: E/System.out(31733): file update exception, statusCode: -1 
03-03 05:04:31.738: E/System.out(31733): file update exception, e: 404 Not Found 
03-03 05:04:31.738: E/System.out(31733): "message": "File not found: FileIdRemoved", 

答:下面Aegan的評論是正確的,原來你也可以繼承的異常的GoogleJsonResponseException並從那裏得到的狀態代碼。在這種情況下,答案最終取決於我使用GoogleClient的事實,該客戶端生成包含狀態碼的IO異常的子類。

例子:

Try{ 
    ... 
    }catch (IOException e) { 

     if(e instanceof GoogleJsonResponseException){ 
      int statusCode = ((GoogleJsonResponseException) e).getStatusCode(); 
      //do something 
    } 
} 
+0

也許你正在404的子類獲得IOException異常? – Devrim

+0

正確!我得到一個GoogleJsonResponseExpection,它在被轉換時包含一個getStatusCode()方法。如果您想寫出來,我會將其標記爲正確。 – NameSpace

回答

6

手柄HttpResponseException

catch (HttpResponseException hre) { 
    if (hre.getStatusCode() == 404) { 
     // TODO: Handle Http 404 
    } 
} 

詳細信息: AbstractGoogleClientRequest創建例外。 See source code

execute方法調用executeUnparsedexecuteUnparsednewExceptionOnError產生異常。在那裏你會看到,它會拋出一個HttpResponseException(這是IOException的一個子類)

+0

死了,捕獲了GoogleJsonResponseException擴展的超類,以獲得比我在註釋之後寫出的更一般化的答案。 – NameSpace

+1

如果你把它作爲第一個catch子句(在IOException之前),將會起作用。 – Devrim

+0

嗯,我重新排序我的例外,以避免必須投入:) – NameSpace

2

你應該得到的響應錯誤代碼。

我做了小例子:

int code = con.getResponseCode(); 
if (code == HttpURLConnection.HTTP_NOT_FOUND) { 
    // Handle error 
} 
else { 
    // Do your work 
} 
+0

不幸的是,我沒有找到正確的機制在Google Drive SDK中找到它。你可以看到我的更新,我嘗試update.getLastStatusCode(),但它的返回值爲-1,而錯誤消息包含一個404. – NameSpace

+1

@NameSpace'我沒有找到正確的機制在Google SDK中找到它 - ? ?? getResponseCode()自API 1以來一直存在。 – Simon

+1

我知道您從HttpURLConnection獲取getReponseCode(),但我從未使用過或創建該類以使用驅動器客戶端上載文件。我將如何從客戶端或更新任務訪問該類? – NameSpace