我想序列化android.net.Uri类型的对象的状态.
下面是我的带有writeObject和readobject方法的模型类
public class ReminderObject implements Serializable {
private boolean isReminderOn;
private int fromHours, toHours;
private int interval;
private ArrayList<CharSequence> daysToRepeat;
private Uri tonetoPlay;
private AdvanceSettingsObject adv;
public ReminderObject(boolean isReminderOn, int fromHours, int toHours,
int interval, ArrayList<CharSequence> daysToRepeat, Uri tonetoPlay,
AdvanceSettingsObject adv) {
super();
this.isReminderOn = isReminderOn;
this.fromHours = fromHours;
this.toHours = toHours;
this.interval = interval;
this.daysToRepeat = daysToRepeat;
this.tonetoPlay = tonetoPlay;
this.adv = adv;
}
/*
getters and setters
*/
public void writeObject(ObjectOutputStream op){
try {
op.defaultWriteObject();
op.writeChars(tonetoPlay.toString());
} catch (IOException e) {
// Todo Auto-generated catch block
e.printstacktrace();
}
}
public void readobject(ObjectInputStream in){
try{
in.defaultReadobject();
tonetoPlay = Uri.parse(in.readUTF());
}catch(Exception e){
}
}
}
MainActivity的代码段:
try {
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath()+"/ReminderData.txt") );
os.writeObject(reminder); // Getting above mentioned Exception here
Log.i("TAG","reminder serialized");
ObjectInputStream is = new ObjectInputStream(new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath()+"/ReminderData.txt"));
ReminderObject reminderRead = (ReminderObject) is.readobject();
if(reminderRead!=null)
Log.i("TAG", "Deserialized Reminder object is : "+reminderRead.toString());
else{
Log.i("TAG", "Null received");
}
} catch(ClassNotFoundException cnf){
cnf.printstacktrace();
} catch (FileNotFoundException e) {
// Todo Auto-generated catch block
e.printstacktrace();
} catch (IOException e) {
// Todo Auto-generated catch block
e.printstacktrace();
}
面临的例外情况:
03-31 23:47:59.246:W / System.err(12681):java.io.NotSerializableException:android.net.Uri $HierarchicalUri
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
03-31 23:47:59.246:W / System.err(12681):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
03-31 23:47:59.246:W / System.err(12681):at com.navkar.navkarreminder.SetReminderActivity.scheduleReminder(SetReminderActivity.java:595)
请求帮助.
解决方法:
我认为问题是你保存问题的数据成员.
private Uri tonetoPlay是非序列化数据类型,您无法将其序列化.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。