2010-10-29 8 views
0

J'essaie de retirer une image .jpg d'un serveur, et l'afficher comme EncodedImage dans un ZoomScreen. Parce que ce fichier .jpg peut être très volumineux, je veux enregistrer le fichier .jpg dans un fichier et le lire à partir de là, donc je n'ai pas le tout en mémoire.Blackberry: Télécharger et afficher .jpg image

Le problème que je suis face est que Connector.open (« http.url.com/file.jpg ») est soit jeter un IOException avec le message « Bad Socket Id », ou il jette un ClassCastException quand je tenter d'ouvrir un FileConnection à l'URL. Voici un exemple de ce que j'ai essayé:

try { 
     FileConnection fileIn = (FileConnection)Connector.open(fileURL); 
     FileConnection fileOut = (FileConnection)Connector.open(fileDest); 

     if(!fileOut.exists()) 
      fileOut.create(); 

     InputStream is = fileIn.openInputStream(); 
     OutputStream os = fileOut.openOutputStream(); 

     while(fileIn.canRead() && fileOut.canWrite()){ 
      os.write(is.read()); 
     } 

     is.close(); 
     os.close(); 

     fileIn.close(); 
     fileOut.close(); 

     EncodedImage image = EncodedImage.getEncodedImageResource(fileDest); 

     UiApplication.getUiApplication().pushScreen(new ZoomScreen(image)); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Je reçois la plupart de ces de RIM, mais je manque quelque chose. Je sais que l'URL est correcte car j'utilise le même format lorsque je diffuse de l'audio depuis le même serveur. L'exception est lancée sur la première ligne lorsque j'essaie de me connecter au serveur.

Est-ce que quelqu'un a de l'expérience avec ça?

Répondre

1

Compris.

try { 
    HttpConnection conn = (HttpConnection) Connector.open(fileURL); 
    InputStream fileIn = conn.openInputStream(); 

    ByteArrayOutputStream os = new ByteArrayOutputStream(); 

    for(int i = fileIn.read(); i > -1; i = fileIn.read()){ 
     os.write(i); 
    } 

    byte[] data = os.toByteArray(); 

    EncodedImage image = EncodedImage.createEncodedImage(data, 0, data.length); 

    UiApplication.getUiApplication().pushScreen(new ZoomScreen(image)); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

J'espère que d'autres trouveront ceci utile.

1
public void run(){ 
    try{ 
     StreamConnection streamC = (StreamConnection) Connector.open(url+";deviceside=true"); 
     InputStream in = streamC.openInputStream(); 

     byte[] data = new byte[4096]; 
     data = IOUtilities.streamToBytes(in); 
     in.close(); 
      EncodedImage eImage = EncodedImage.createEncodedImage(data, 0, data.length); 
     } 
    catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
+0

Merci pour l'entrée supplémentaire, mais ce que vous avez ici ne fonctionnera pas pour tout. Vous lisez seulement 4 Ko, mais que faire si le fichier est plus grand que 4 Ko? Considérant que la plupart des jpg ne sont pas très grands, le vôtre fonctionnera dans la plupart des cas, mais pas pour tout. – mtmurdock

Questions connexes