2
메신저 자바와 안드로이드에서 초보자를 marshmalow, 내가 후속 얻을 "java.io.StreamCorruptedException가를 : 잘못된 형식 : 0"ObjectInputStream를 java.io.StreamCorruptedException가 : 잘못된 형식 :</p> <p>: 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();
}
}
게시물 Item.readObject –
이 아이템 클래스 –
을 올렸습니다. 이제 오류를 제거했습니다 ... [mcve] –