2016-07-20 7 views
1

Ich habe versucht, keine der Web-Services in einer sequentiellen Weise wie eins nach dem anderen wie unten aufrufen. Sobald alle Webdienste erfolgreich ausgeführt wurden, ist die Aufgabe beendet. Wenn nicht, dann muss die Warnung dem Benutzer angezeigt werden.Netzwerk-Anfrage Timeout oder Netzwerk verloren oder langsam Netzwerk nicht richtig behandeln in Codenameone

Code:

Dialog progressDialog = ComponentUtils.getFormattedDialog(new Dialog()); 
progressDialog.showModeless(); 

boolean allDone = true; 

for(int i=0;i<serviceList.size();i++){ 
    String serviceUrl = serviceList.get(i); 
    boolean service = getServiceResponse(serviceUrl); 
    if(service==false){ 
     progressDialog.dispose(); 
     allDone = false; 
     break; 
    } 
} 

if(allDone){ 
    progressDialog.dispose(); 
    Dialog.show("SUCCESS","Process Done","OK",null); 
} 
else{ 
    Dialog.show("FAIL","Process Failed","OK",null) 
} 

... 


public static boolean getServiceResponse(String serviceUrl){ 
    boolean isSuccess = false; 
    ConnectionRequest connectionRequest = new ConnectionRequest() { 
     @Override 
     protected void handleErrorResponseCode(int code, String message) { 
      this.kill(); 
      LogUtil.setErrorLog(message,page_name+ " > handleErrorResponseCode"); 
      isSuccess = false 
     } 

     @Override 
     protected void handleException(Exception err) { 
      this.kill(); 
      LogUtil.setErrorLog(err,page_name + " > handleException"); 
      isSuccess = false 
     } 

     @Override 
     protected void readResponse(InputStream input) { 
      isSuccess = true 
     } 
    }; 

    connectionRequest.setUrl(serviceUrl); 
    connectionRequest.setContentType("application/x-www-form-urlencoded"); 
    connectionRequest.setPost(true); 
    connectionRequest.setDuplicateSupported(true); 
    connectionRequest.setTimeout(100000); 
    NetworkManager.getInstance().addToQueueAndWait(connectionRequest); 

    return isSuccess; 
} 

Immer, wenn ich Prozess im vollen Netzwerk zu synchronisieren versuchen es funktioniert wie aspected in Ordnung.

Wenn das Netzwerk jedoch langsam läuft oder verloren geht, wird es den Benutzer normalerweise nicht auf das Problem aufmerksam machen. Stattdessen bleibt es einfach beim Prozessdialog.

Ich habe Fehlerprotokoll in einer Datei hinzugefügt, um später auf das Problem zu überprüfen. Aber das zeigt auch keinen Fehler in diesem Fall.

Jede Hilfe wird deutlicher.

Antwort

0

Timeout in Codename One ist derzeit auf Verbindungs-Timeout beschränkt und gilt nicht für Lese-Timeout, so dass es nach dem Herstellen einer Verbindung dauern wird. Sie können einen Fortschrittslistener auf dem NetworkManager verwenden, um solche Situationen zu erkennen und die Verbindung zu beenden.

+0

@ Shai-Danke für den Vorschlag. Eigentlich habe ich meine eigene Fortschrittsleiste ohne Aktion. Also, wie geht man damit um? Und in diesem Fall des Timeouts wird kein Fehler in handleException oder handleErrorResponseCode ausgelöst. – Sweety

+0

Timeout ist auf diese Weise problematisch, es verhält sich in den verschiedenen Betriebssystemen sehr unterschiedlich –