【问题标题】:where android saves serialized objects?android在哪里保存序列化对象?
【发布时间】:2011-09-07 12:19:37
【问题描述】:

我正在寻找序列化后对象在哪里?我想将序列化对象(在另一个应用程序中创建)放到我的 android 项目中,然后只在我的游戏中加载这些文件。问题是我不知道我必须把这些对象放在哪里?即使我从 android 应用程序中保存对象,它也永远不会保存在我的项目文件夹中。我的对象加载和保存函数

public static void save(Context context, Map obj, String nazwa)
{
   FileOutputStream str = null;
   ObjectOutputStream objStr = null;


   try {
     str = context.openFileOutput(nazwa, Context.MODE_PRIVATE);
     objStr = new ObjectOutputStream(str);

     objStr.writeObject(obj);

    } catch (FileNotFoundException e)
    {
        e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    } finally
    {
        try
        {
            if (objStr != null) objStr.close();
        } catch (IOException e) {}
        try
        {
           if (str != null) str.close();
        } catch (IOException e) {}
    }


}



public static Map load(Context context, String nameFile)
     {
        Map obj = null;
        FileInputStream str_w = null;
        ObjectInputStream obj_w = null;
        try
        {
           str_w = context.openFileInput(nameFile);
           obj_w = new ObjectInputStream(str_w);
           obj = (Map) obj_w.readObject();

    } catch (FileNotFoundException e)
    {
       e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    } catch (ClassNotFoundException e)
    {
       e.printStackTrace();
    } finally
    {
        try
        {
           if (obj_w != null) obj_w.close();
        } catch (IOException e) {}
        try
        {
           if (str_w != null) str_w.close();
        } catch (IOException e) {}
    }
    return obj;
 }

如果我将我的目标文件复制到 /levels/ 并使用

final Map map2 = MapManager.load(this, "/levels/map1.lvl");

final Map map2 = MapManager.load(this, "levels/map1.lvl");

它永远不会起作用

我该怎么做?

【问题讨论】:

    标签: java android serialization


    【解决方案1】:

    您将它们作为应用私有文件 (Context.MODE_PRIVATE) 存储到只有应用有权访问的文件夹中,因此其他应用将无法访问它们。

    我认为存储它们以便在应用程序之间共享它们的最简单方法是将它们存储到 sdcard 使用:

    Environment.getExternalStorageDir();
    

    注意将它们存储为全局可读的。

    【讨论】:

    • 好的,但我想在我的桌面应用程序中创建这些对象,然后只将它们复制到我的 android 应用程序。我知道我可以创建对象并将它们保存在 sd 卡上,但我想在我的应用程序中创建文件夹,将对象放在那里(在安装之前),并在安装时将此文件夹移动到 sd 卡,然后在游戏中使用它。
    • 我在这里找到了解决方案developer.android.com/guide/topics/data/…
    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2020-08-08
    • 2011-07-16
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多