2

イムをmarshmalow、私がフォローを得る:ObjectInputStreamのjava.io.StreamCorruptedException:間違ったフォーマット:0ロリポップとJavaとAndroidで初心者に

"java.io.StreamCorruptedException:間違ったフォーマット:0"

私はオブジェクトを読み返そうとします。 しかし、私はロリポップとマシュマロ装置でしか入手できません。ノーガット(7.1)でこれを実行すると、全く問題はありません。 提案がありますか?

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"); 
    } 

クラスコード:

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"); 
    } 

} 

}

パブリッククラス項目はちょうど私が誰のための問題を解決する方法を掲示シリアライズ{

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

post Item.readObject –

+0

投稿アイテムクラス –

+0

あなたはエラーを削除しました... [mcve] –

答えて

1

実装します誰将来も同じ問題が発生します。で

public class Item implements Serializable 

iが変更されました:この行:この行に

private boolean itemChecked; 

private Boolean itemChecked; 

を私はbooleanとしてプリミティブがシリアライズされている知っているように私はなぜ知りません違いがありました。なぜヌーガットで働いていたのかわからず、ロリポップで働いていませんでした。&マシュマロ。 ですが、現在はうまく機能しています。 誰かがなぜその理由を知っていれば、私は聞いて喜んでいる。

関連する問題