2013-08-20 5 views
0

J'ai téléchargé un certain nombre de fichiers png via un service, et maintenant j'essaie de les utiliser. Ils vont sur la carte SD de l'utilisateur. J'ai vérifié que chacun des fichiers est sur la carte. Mais quand j'essaie de définir l'un d'entre eux comme un ImageView, j'obtiens un espace vide. Alors, je suis allé voir que les fichiers étaient intacts en essayant manuellement de les afficher sur le téléphone en utilisant la visionneuse d'image du téléphone. Aucun des fichiers s'ouvrira. Ce que je voudrais savoir, c'est s'il me manque des étapes après avoir téléchargé les fichiers qui doivent se produire pour les rendre visibles en tant que fichiers PNG (ou fichiers bitmap). Voici le code dans mon service que j'utilise pour télécharger les fichiers:Les fichiers png téléchargés ne sont pas lisibles

public class DownloadPicture extends IntentService { 

    private int result = Activity.RESULT_CANCELED; 
    public static final String FILENAME = "filename"; 
    public static final String FILEPATH = "filepath"; 
    public static final String RESULT = "result"; 
    public static final String NOTIFICATION "com.mydomain.myapp.MyBroadcastReceiver"; 

    public DownloadPicture() { 
     super("DownloadPicture"); 
    } 

    public DownloadPicture(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     String fileName = intent.getStringExtra(FILENAME); 
     String urlPath = this.getResources().getString(R.string.imagesURL) + fileName; 
     System.err.println("starting download of: " + fileName); 
     System.err.println(urlPath); 
     File output = new File(Environment.getExternalStorageDirectory(), fileName); 
     if (output.exists()) {output.delete();} 

     InputStream stream = null; 
     FileOutputStream fos = null; 
     try { 
      URL url = new URL(urlPath); 
      stream = url.openConnection().getInputStream(); 
      InputStreamReader reader = new InputStreamReader(stream); 
      fos = new FileOutputStream(output.getPath()); 
      int next = -1; 
      while ((next = reader.read()) != -1) { 
      fos.write(next); 
      } 

      //Maybe I need to do something else here???? 

      // Successful finished 
      result = Activity.RESULT_OK; 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (stream != null) { 
      try { 
       stream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      } 
      if (fos != null) { 
      try { 
       fos.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      } 
     } 

     publishResults(output.getName(), output.getAbsolutePath(), result); 
    } 
} 
+0

Le code semble correct. Êtes-vous sûr que urlPath pointe vers un fichier png? Avez-vous essayé de le télécharger en utilisant un navigateur? –

+0

Oui aux deux questions. Aussi, lorsque je navigue directement sur la carte SD à l'aide de l'application gestionnaire de fichiers de mon téléphone, il a l'extension .png. – Alex

+0

Essayez de télécharger sur votre PC, puis comparez-le avec le fichier téléchargé sur votre appareil. Il peut y avoir un problème de connexion et le fichier peut être endommagé. Et je pense que cela ne fera pas de mal, mais essayez de lire le flux d'entrée et écrivez dans le flux de sortie avec un tampon de quelques octets au lieu d'un octet à la fois, et essayez de vider avant de fermer le flux de sortie. –

Répondre

Questions connexes