我想序列化android.net.Uri類型的對象的狀態。Serialize android.net.Uri對象
下面是我的writeObject模型類和readObject methoods
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)
請求幫助。
是,開放的我們是不是序列化的,所以我把它改成字符串。 – shahharshil46
donot忘記標記答案solve.it幫助其他人找到答案。 – User10001
'Uri' **是可序列化的** **檢查了這一點http://stackoverflow.com/questions/22533432/create-object-from-gson-string-doesnt-work – NecipAllef