2017-03-16 25 views
1

我正在使用ConnectionRequest和downloadImageToStorage從Web服務器下載圖像。網絡服務器返回一個307的位置,下一個網址返回301與另一個位置,該位置最終返回實際圖像。在ConnectionRequest中處理307和301

我定義了一個FailureCallback,但它根本沒有被調用。我所能看到的只是設備屏幕上的一條消息,指示錯誤並具有重試/取消按鈕。

這裏是我的代碼

FailureCallback<Image> failure = new FailureCallback<Image>() { 
     public void onError(Object sender, Throwable err, int errorCode, String errorMessage) { 
      System.out.println(errorCode); 
      if (errorCode == 307 || errorCode == 301) { 
       System.out.println(sender.getClass().getName()); 
      } 
     } 
    }; 
    ConnectionRequest request = new ConnectionRequest(); 
    request.setUrl(url); 
    request.setHttpMethod("GET"); 
    request.downloadImageToStorage("img_" + imgCount, (img) -> { 
     SpanLabel t = new SpanLabel(); 
     t.add(BorderLayout.CENTER, img); 
     myform.add(t); 
    }, failure); 

    ++imgCount; 

我如何能捕捉這些錯誤,所以我可以從響應對象獲取的位置,並呼籲那些有新ConnectionRequests?

請注意,我可以看到錯誤代碼和位置鏈,當我在Chrome中使用調試器來獲取我正在嘗試加載的映像時。

由於

+0

失敗未被調用的事實可能是一個錯誤,我曾要求史蒂夫在他寫這個方法時考慮這個問題,並可能對此有更好的瞭解。 –

回答

1

要捕獲的錯誤代碼和錯誤消息setReadResponseForErrors方法應被調用,並如下面的代碼

request .setReadResponseForErrors(true); 

@Override 
      protected void handleErrorResponseCode(int code, String message) { 

      Dialog.show("Message", " code "+ code+" msg "+message, "ok", null); 
      } 
+0

這工作得到的代碼,但我也需要從響應頭獲取位置。我在ConnectionRequest對象和handleErrorResponseCode中添加了readHeaders覆蓋,但readHeaders方法永遠不會被調用。我如何訪問響應頭文件? –

0

如曬在他的評論中提及覆蓋handleErrorResponseCode ConnectionRequest的方法,有一個導致307被解釋爲錯誤響應的錯誤,而不是重定向。現在應該最新修復,這應該會導致您的示例工作。

還有另一個bug,它沒有被修復,當有錯誤響應代碼時,它會阻止onError()回調被調用。這將很快得到解決。同時,您的示例應該可以工作(並且不會調用onError()),並使用301和307響應代碼。