序列化android.net.Uri对象

我想序列化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是非序列化数据类型,您无法将其序列化.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...