public class test extends Activity {
public class Dog implements Serializable{
String Sex;
Integer Age;
String Name;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
test();
}
public void test(){
String strPath="/sdcard/aaa.ser";
Dog d = new Dog();
d.Sex = "Man";
d.Age = 3;
d.Name = "ppoppy";
//직렬화 쓰기
try{
FileOutputStream fos = new FileOutputStream(strPath);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(d);
oos.close();
}catch(Exception e){
e.printStackTrace();
}
//직렬화 읽기
try{
FileInputStream fis = new FileInputStream(strPath);
ObjectInputStream ois = new ObjectInputStream(fis);
Object o = ois.readObject();
Dog dd = (Dog)o; // <== 요기서 디버그 걸어서 데이터 확인.
ois.close();
}catch(Exception e){
e.printStackTrace();
}
}
기본 WRITE_EXTERNAL_STORAGE는 허용 해놨구요.
위의 소스가 일반 자바 프로젝트에서는 너무너무 잘 되는데요. (대신 경로를 c:\\aaa.ser 로 변경후에)
안드로이드에서 실행만 하면 직렬화 읽기 Object o = ois.readObject(); 에서
java.io.WriteAbortedException: Read an exception; java.io.NotSerializableException
에러가 발생합니다. 이유가 뭘까요? 제발즘 알려주세용~
boolean result = true;
ObjectInputStream ois = null;
FileInputStream fis = null;
try{
fis = new FileInputStream(XYX);
ois = new ObjectInputStream(fis);
XXXXX.setDB((HashMap<String, Integer>)ois.readObject());
}catch (Exception e) {
// TODO: handle exception
result = false;
}
return result;
}
제가 쓰는 코드인데 잘 됩니다.
차이점은 ois.close(); 밖에 없네요
Dog dd = (Dog)ois.readObject();