2

im un débutant à Java et Android, je reçois le suivi:ObjectInputStream java.io.StreamCorruptedException: Format incorrect: 0 sucettes et marshmalow

"java.io.StreamCorruptedException: Format incorrect: 0"

quand j'essaye de relire l'objet. mais je l'obtiens seulement sur les appareils de sucette et de guimauve, quand je cours ceci au Nougat (7.1) je n'ai aucun problème du tout. des suggestions?

public class MainActivity extends AppCompatActivity { 

public final String FILE_NAME = "FILE_NAME"; 
private List<Item>; 
private ReadWriteFunctions readWriteFunctions = new ReadWriteFunctions(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final Bitmap defaultBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.no_pic); 

    //Read from internal storage 
    items =readWriteFunctions.readObj(this,FILE_NAME); 
    if (items == null){//if the file don't exist it returns null 
     items = new ArrayList<>(); 
     items.add(new Item(false,"",defaultBitmap)); 
     Log.d("readObj", "Created new list"); 
    } 

Code de classe:

public class ReadWriteFunctions { 


public ArrayList<Item> readObj(Context context, String fileName) { 
    ArrayList<Item> arrayList; 
    try { 
     FileInputStream fis = context.openFileInput(fileName); 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     arrayList = (ArrayList<Item>) ois.readObject(); 
     ois.close(); 
     return arrayList; 
    }catch (IOException | ClassNotFoundException e){ 
     e.printStackTrace(); 
     return null; 
    } 
} 

public void writObj(Context context,String fileName,Object obj) { 
    try { 
     FileOutputStream fos = context.openFileOutput(fileName,Context.MODE_PRIVATE); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(obj); 
     oos.close(); 
     Log.d("writObj", "Saved"); 
    }catch (IOException e){ 
     e.printStackTrace(); 
     Log.d("writObj", "Save Fault"); 
    } 

} 

}

public class article implémente Serializable {

private boolean itemChecked; 
private String itemText; 
private transient Bitmap itemPicture; 


public Item(Item item) {//Constructor that receive item 
    this.setItemChecked(item.isItemChecked()); 
    this.setItemText(item.getItemText()); 
    this.setItemPicture(item.getItemPicture()); 

} 

public Item(boolean itemChecked, String itemText, Bitmap itemPicture) { 
    this.itemChecked = itemChecked; 
    this.itemText = itemText; 
    this.itemPicture = itemPicture; 
} 


public boolean isItemChecked() { 
    return itemChecked; 
} 

public void setItemChecked(boolean itemChecked) { 
    this.itemChecked = itemChecked; 
} 

public String getItemText() { 
    return itemText; 
} 

public void setItemText(String itemText) { 
    this.itemText = itemText; 
} 

public Bitmap getItemPicture() { 
    return itemPicture; 
} 

public void setItemPicture(Bitmap itemPicture) { 
    this.itemPicture = itemPicture; 
} 



private void writeObject(java.io.ObjectOutputStream out) throws IOException { 

    itemPicture.compress(Bitmap.CompressFormat.PNG, 100, out); 
    out.defaultWriteObject(); 

} 

private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { 

    itemPicture = BitmapFactory.decodeStream(in); 
    in.defaultReadObject(); 

} 

}

+0

article Item.readObject –

+0

a publié la classe d'objet –

+0

à quoi bon maintenant que vous avez supprimé l'erreur ... [mcve] –

Répondre

1

affichant juste la façon dont je résoudre le problème pour tout le monde qui obtenir le même problème à l'avenir.

à:

public class Item implements Serializable 

i changé: cette ligne:

private boolean itemChecked; 

à cette ligne:

private Boolean itemChecked; 

que je sais primitives comme booléennes Serializable donc je ne sais pas pourquoi ça a fait une différence, aussi je ne comprends pas pourquoi ça a marché sur Nougat et ça n'a pas marché pour sucette & guimauve. mais ça fonctionne bien maintenant. si quelqu'un sait pourquoi, je suis heureux d'entendre.