2009-12-09 3 views
1

Je télécharge un fichier à partir d'un téléphone Nokia N97 vers le serveur, tout fonctionne bien, mais après le téléchargement du fichier, je veux obtenir une réponse du serveur. Le problème est que je reçois une réponse seulement après une demi-minute ou plus. De ce que je vois les blocs de code dans httpConnection.getResponseCode() en attente de réponse. Je l'ai testé sur un Sony Ericsson et j'obtiens une réponse très rapide donc je suppose que c'est un problème avec le Nokia N97. (n'est pas un problème de serveur, car il fonctionne bien sur d'autres téléphones)J2ME HttpConnection getResponseCode() bloque attente réponse du serveur sur Nokia N97

Est-ce que quelqu'un sait pourquoi cette chose n'arrive que sur Nokia?

Voici un extrait de code:

UploadFile public() {

 httpConn = (HttpsConnection) Connector.open(url, Connector.READ_WRITE); 
     ... 
     //set httpConn parameters and request method 
     ... 

     writeParametersAndFileName(os, "text/plain"); 


     **writeFileToStream(os);** 

     os.write("\r\n".getBytes()); 
     os.write("--".getBytes()); 

     os.write(boundary.getBytes()); 

     os.write("--".getBytes()); 
     os.write("\r\n".getBytes()); 

     *//here code blocks on Nokia N97. Same thing happens if I use os.flush() after 
     // I send chunks of the file* 
     ..... 
     codeResp = httpConn.getResponseCode(); 
     // check condition 
     checkResponseHeader(); 

}

publique writeFileToStream() {

 InputStream is = null; 
     FileConnection c = null; 
     try 
     { 
      c = (FileConnection) Connector.open("file:///"+ sourcePath, Connector.READ); 

      if(c.exists()) { 
       is = c.openInputStream(); 

       long fs = c.fileSize(); 
       while (total < fs) { 
        byte[] data = new byte[512]; 
        int readAmount = is.read(data,0,512);      
        total += readAmount; 
        os.write(data, 0, readAmount); 


      } 

      //os.flush(); 
     } 
     catch (IOException ex) { 
      //    
     } 
     finally 
     { 
      //close connection 

     } 

}

Répondre

4

Vous pensez seulement que votre fichier a été téléchargé.

Votre appel à getResponseCode() est le premier qui provoque la connexion de HttpConnection au serveur.

Il ne sera pas retourné tant qu'il n'aura pas téléchargé le fichier, ce qui prendra vraisemblablement plus d'une minute.

Ce comportement est tout à fait valable selon la spécification HttpConnection dans JSR-118.

" Les méthodes suivantes provoquent la transition à l'état connecté lorsque la connexion est dans l'état de configuration

* openInputStream 
* openDataInputStream 
* getLength 
* getType 
* getEncoding 
* getHeaderField 
* getResponseCode 
* getResponseMessage 
* getHeaderFieldInt 
* getHeaderFieldDate 
* getExpiration 
* getDate 
* getLastModified 
* getHeaderField 
* getHeaderFieldKey 

"

Je prévois que les autres téléphones que vous avez essayé sont moins puissants que le N97 et ont besoin de vider le OutputStream, donc de se connecter au serveur avant qu'ils ne e spécification.

Questions connexes