2017-03-16 1 views
1

I ConnectionRequest und downloadImageToStorage bin mit einem Bild von einem Web-Server zum Download bereit. Der Webserver gibt einen 307 mit einem Ort zurück, dass die nächste URL einen 301 mit einem anderen Ort zurückgibt, dieser Ort gibt schließlich das tatsächliche Bild zurück.Umgang mit 307 und 301 in ConnectionRequest

definiert ich eine FailureCallback, aber es ist nicht immer überhaupt bezeichnet. Alles, was ich sehen kann, ist eine Nachricht auf dem Bildschirm des Geräts, die den Fehler anzeigt und eine Schaltfläche zum Wiederholen/Abbrechen hat.

Hier ist mein Code

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; 

Wie kann ich diese Fehler erfassen, damit ich die Lage von der Antwort Objekten erhalten kann und die mit neuen ConnectionRequests nennen?

Bitte beachte, dass ich die Kette von Fehlercodes sehen und Orten, wenn ich den Debugger in Chrome verwenden, um das Bild, das ich zu laden versuchen.

Dank

+0

Die Tatsache, dass nicht aufgerufen fail ist möglicherweise ein Fehler sein, habe ich Steve fragte in die aussehen, als er diese Methode geschrieben und vielleicht einen besseren Einblick in diese haben. –

Antwort

1

Um Fehlercode und Fehlermeldung setReadResponseForErrors Methode erfassen sollte und außer Kraft setzen handleErrorResponseCode Methode von ConnectionRequest in folgenden Code

request .setReadResponseForErrors(true); 

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

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

Das hat funktioniert, um den Code zu bekommen, aber ich muss auch den Standort aus dem Antwortheader holen. Ich habe eine readHeaders-Überschreibung im ConnectionRequest-Objekt hinzugefügt, zusammen mit dem handleErrorResponseCode, aber die readHeaders-Methode wird nie aufgerufen. Wie kann ich auf die Antwortheader zugreifen? –

0

Als Shai in seinem Kommentar erwähnt, wie gezeigt aufgerufen werden Es gab einen Fehler, der dazu führte, dass 307 als Fehlerantwort und nicht als Umleitung interpretiert wurde. Dies sollte jetzt spätestens behoben sein, und dies sollte dazu führen, dass Ihr Beispiel funktioniert.

Es gibt auch einen anderen Fehler, der wurde nicht behoben, genannt von den onError() Rückruf verhindert wird, wenn ein Fehler Antwortcode ist. Dies wird bald behoben werden. In der Zwischenzeit sollte Ihr Beispiel mit 301 und 307 Antwortcodes funktionieren (und der onError() wird nicht aufgerufen).