2011-06-24 3 views
0

J'ai un service Web qui renvoie un fichier jpg. J'ai lu ce jpg dans un octet [], convertis en bitmap, et l'enregistre sur la carte SD. La prochaine fois que l'utilisateur accèdera à cette activité, il recherchera sur la carte SD pour voir si l'image existe avant de cliquer sur le service Web. Toutefois, le code qui vérifie la carte SD renvoie une exception StreamCorruptedException si le fichier existe.StreamCorruptedException lors de la lecture Bitmap de la carte SD

Voici mon code qui écrit sur la carte SD:

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 
    String root = Environment.getExternalStorageDirectory().toString(); 
    new File(root + "/images").mkdirs(); 
    try { 
     File file = new File(root + "/images", Integer.toString(intImageId) + "m.jpg"); 
     FileOutputStream os = new FileOutputStream(file); 
     Bitmap theImageFromByteArray = BitmapFactory.decodeByteArray(image, 0, image.length); 
     theImageFromByteArray.compress(Bitmap.CompressFormat.JPEG, 80, os); 
     os.flush(); 
     os.close(); 
    } 
    catch (FileNotFoundException e) { 
    } 
    catch (IOException e) { 
    } 
} 

Voici mon code qui vérifie la carte SD pour l'image existante:

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 
     || Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { 
    try { 
     File file = new File(Environment.getExternalStorageDirectory() + "/images", Integer.toString(mImageId) + "m.jpg"); 
     FileInputStream fis = new FileInputStream(file); 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     mImage = (Bitmap)ois.readObject(); 
     ois.close(); 
    } 
    catch (Exception e) { 
    } 
} 

L'exception se produit au cours de nouvelles ObjectInputStream (fis)

Répondre

0

Étant donné que l'exception se produit dans le constructeur ObjectInputStream, je suppose qu'il y a un problème avec le fichier que vous avez écrit. Jetez un oeil à this. Il faut une approche légèrement différente pour écrire et lire une image.

0

Vous ne pouvez pas lire arbitrairementObject() comme ceci. writeObject() doit être utilisé pour que readObject() détecte un objet sérialisé valide.

+0

Alors, comment dois-je lire le fichier en fonction de comment je l'écris? – Andrew

+0

Qu'en est-il de BitmapFactory.decodeStream (InputStream est, Rect outPadding, BitmapFactory.Options opts) ou l'une des API decodeFile() il? [doc] (http://developer.android.com/reference/android/graphics/BitmapFactory.html#decodeFile%28java.lang.String%29) – ribram

Questions connexes