2014-05-23 9 views
1

Je suis en train de télécharger des images à partir du serveur et de l'enregistrer sur la carte SD, mais il a échouéImpossible d'écrire sur la carte SD sur mon appareil Android

Quand je l'essayer sur l'émulateur ou un autre appareils fonctionne correctement mais mon appareil non. Mon appareil est un mini-galaxie gt S5570

Voici mon code:

public String downloadImage(String imageUrl, String id, String folder) { 
     String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/FBLogoQuiz/" + folder + "/"; 
     Log.d("path", path); 
     File FBLogoQuiz = new File(path); 
     FBLogoQuiz.mkdirs(); 
     FBLogoQuiz.mkdir(); 
     String data = ""; 
     try { 
      URL url = new URL(imageUrl); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeStream(input); 

      // create a File object for the parent directory 
      File FBLogoQuizDirectory = new File(path, id + ".png"); 

      // have the object build the directory structure, if needed. 
      FBLogoQuizDirectory.createNewFile(); 
      data = String.valueOf(String.format(path + id + ".png")); 

      FileOutputStream stream = new FileOutputStream(data); 

      ByteArrayOutputStream outstream = new ByteArrayOutputStream(); 
      myBitmap.compress(Bitmap.CompressFormat.PNG, 85, outstream); 
      byte[] byteArray = outstream.toByteArray(); 

      stream.write(byteArray); 
      stream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return data; 

    } 

Manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Logcat:

05-24 00:26:10.099: W/System.err(28984): java.io.IOException: No such file or directory 
05-24 00:26:10.099: W/System.err(28984): at java.io.File.createNewFileImpl(Native Method) 
05-24 00:26:10.109: W/System.err(28984): at java.io.File.createNewFile(File.java:1160) 
05-24 00:26:10.109: W/System.err(28984): at com.nileworx.footballlogoquiz.GetUpdatesService.downloadImage(GetUpdatesService.java:229) 
05-24 00:26:10.109: W/System.err(28984): at com.nileworx.footballlogoquiz.GetUpdatesService.getUpdates(GetUpdatesService.java:197) 
05-24 00:26:10.109: W/System.err(28984): at com.nileworx.footballlogoquiz.GetUpdatesService.onHandleIntent(GetUpdatesService.java:127) 
05-24 00:26:10.109: W/System.err(28984): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 
05-24 00:26:10.109: W/System.err(28984): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-24 00:26:10.109: W/System.err(28984): at android.os.Looper.loop(Looper.java:123) 
05-24 00:26:10.109: W/System.err(28984): at android.os.HandlerThread.run(HandlerThread.java:60) 
+0

Cela peut sembler évident, mais est-ce que '/ FBLogoQuiz /' et le dossier de la chaîne que vous transmettez existent? – MJ93

+0

il sera créé pour la première fois .. je pense qu'il vérifie automatiquement si cela existe ou non et créer sinon –

+0

Non, il ne crée pas le répertoire. S'il vous plaît voir ma réponse. – MJ93

Répondre

2

createNewFile() ne crée pas un nouveau répertoire quand il crée le fichier. Vous devez faire:

FBLogoQuizDirectory().getParentFile().mkdirs(); 

Avant de créer le fichier.

+0

Super! Ça marche :) Merci beaucoup l'homme :) –

Questions connexes