2015-01-15 81 views
1

我有一个类有很多物体像保存列表对象持久化内部android系统

private class MyDataStuff{ 

    private String mostInterestingString; 
    private int veryImportantNumber 
    //...you get the idea 

    public MyDatastuff{ 
    //init stuff... 
    } 

    //some getter methods   

} 

而且我有一个类,让我们把它叫做User拥有的MyDataStuff名单,一些多头,​​弦乐等等。 我想将User的对象存储到内部存储器上的文件中。我试了下面的代码:

//loading 
try{ 
     FileInputStream fis = this.getApplicationContext().openFileInput("UserData.data"); 
     ObjectInputStream is = new ObjectInputStream(fis); 
     User loadedUser = (User) is.readObject(); 
     is.close(); 
     fis.close(); 
     appUser = loadedUser; 
    }catch (Exception e){ 
     Log.e("MainActivity", "Error: loading from the internal storage failed - \n" + e.toString()); 

} 
//Saving 
if(appUser == null){ 
    Log.e("MainActivity", "Create new User"); 
    appUser = new User(); 
    try{ 
     FileOutputStream fos = this.getApplicationContext().openFileOutput("UserData.data", Context.MODE_PRIVATE); 
     ObjectOutputStream os = new ObjectOutputStream(fos); 
     os.writeObject(this); 
     os.close(); 
     fos.close(); 
    }catch (Exception e){ 
     Log.e("MainActivity", "Error: Failed to save User into internal storage - \n" + e.toString()); 
    } 
} 

这导致java.io.NotSerializableException。我阅读了Serializable文档,并通过testwise将User类实现了Serializable并删除了每个属性,除了long和Strings。 它仍然导致这个异常,这让我相信,字符串或长期默认情况下不可序列化。

我需要将对象保存为当前状态。有没有更好的方法来做我想做的事情, 如果没有,我该如何解决这个问题?

+0

您应该专注于保存数据的标准方式。将对象保存到XML文件或数据库中。 API 21具有可持久一束你可以把包包的对象为,但我还没有尝试过呢。 – danny117 2015-01-15 17:37:34

回答

0

仔细看看你的序列化代码。

//Saving 
if(appUser == null){ 
    Log.e("MainActivity", "Create new User"); 
    appUser = new User(); 
    try{ 
     FileOutputStream fos = this.getApplicationContext() 
       .openFileOutput("UserData.data", Context.MODE_PRIVATE); 
     ObjectOutputStream os = new ObjectOutputStream(fos); 
     os.writeObject(this); 
     ... 

你正在创建一个新的User对象,但你序列化this我猜要么是ActivityFragment。因此,您收到NotSerializableException

String S和Long S可没有问题被序列化。但是,如果您的最终User实施将具有MyDataStuff的列表,则您还必须标记其类Serializable

+0

多么愚蠢的错误,似乎我需要更多的咖啡。非常感谢你,先生。 – Tristus 2015-01-16 12:28:02

0

你需要写APPUSER对象,而不是“本”,如果你想存储的用户对象。