Android中关于保存Object(ObjectOutput/InputStream)的几个问题

我是一只刚入坑的萌新……
最近写了个程序,其中需要保存很多不同种类的数据,于是就用ObjectOutputStream和ObjectInputStream保存了一个类,也能够正常读取,但发现一个问题,当软件重新安装(如版本升级)后,就无法读取以前保存下来的类了!(我是保存在SD卡中的,data文件也没有丢失)然后再用新的软件保存数据,又可以正常读取。搞不懂啊!我也没有改版本和签名,包名也一样,是一个软件,为什么重装后就不能读取了?求大神解答!!图片说明

5个回答

最好帖一下关键代码,还有不能正常读取有报什么异常信息吗?最好也把这关系的信息发出来。

public class DataUtils
{
private static DataUtils mDataUtils;
public final static String sdcard=Environment.getExternalStorageDirectory().getAbsolutePath();
private HashMap mObjectMap=new HashMap();
public final static String path=sdcard+"/.com.hider/";

public synchronized static DataUtils getDataUtils() {
    if(mDataUtils == null) {
        mDataUtils=new DataUtils();
    }
    return mDataUtils;
}

private DataUtils() {
    if(!new File(sdcard+"/.com.hider/").exists()) {
        new File(sdcard+"/.com.hider/").mkdir();
    }
}

public void putData(String key, String content) {
    mStringMap.put(key, content);
}
public String getData(String key) {
    return mStringMap.get(key);
}
public void putObject(String key, Object content) {
    mObjectMap.put(key, content);
}
public Object getObject(String key) {
    return mObjectMap.get(key);
}

public static void saveData() {
    if(!new File(path).exists()) {
        new File(path).mkdir();
    }
    try
    {
        FileOutputStream output=new FileOutputStream(path + "data");
        ObjectOutputStream objectoutput=new ObjectOutputStream(output);
        objectoutput.writeObject(mDataUtils);
        objectoutput.close();
    }
    catch (Exception e)
    {}

}

public static void loadData() {
    if(!new File(path+"data").exists()) {
        return;
    }
    try
    {
        FileInputStream input=new FileInputStream(path + "data");
        ObjectInputStream objectinput=new ObjectInputStream(input);
        mDataUtils=(DataUtils) objectinput.readObject();
        objectinput.close();
    }
    catch (Exception e)
    {}
}

}

你保存的数据,你可以在下次保存前去读出来,看看还有木有

为什么要这么麻烦呢,直接用sqllite或者是SharedPreferences不久好了么,你这太麻烦了

流的写入读出都是固定代码不会出错。

有问题的话 应该 是 每次读的时候看下文件父目录是否创建、文件是否存在,打log判断下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问