0

起初我有很强的 Java 知识,但刚开始接触 Android。

我的 Android 应用程序正在下载一些相当复杂的数据(文本、日期、图像),我将这些数据保存在自定义对象中。数据需要不时刷新。但是通常下载的数据不会改变。

为了将数据保存在内存中,我使用了应用程序对象。不幸的是,当应用程序被杀死时,应用程序对象实例似乎被破坏了。

因此,我想知道在 onPause() 期间将我的自定义对象(包含在应用程序对象中)序列化并保存在内部存储中是否是一种好习惯。显然,我会先从 onResume() 中的文件读取,然后再从 Internet 重新加载。这个想法也是为了启用离线查看。

从长远来看,计划是在后台服务中移动下载日期的代码。由于在 Android 中保持应用程序状态似乎有很多不同的方法,我想确定这是正确的方法。

4

1 回答 1

1

尝试使用这些方法类来保存您需要的对象(实现序列化):

public synchronized boolean save(String fileName, Object objToSave)
    {
        try
        {

            // save to file
            File file = new File(CONTEXT.getDir("filesdir", Context.MODE_PRIVATE) + "/file.file");
            if (file.exists())
            {
                file.delete();
            }

            file.getParentFile().mkdirs();
            file.createNewFile();

            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
            oos.writeObject(objToSave);
            oos.close();

            return true;
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
            return false;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return false;
        }
    }


public synchronized Object load(String fileName)
    {
        try
        {

            File file = new File(CONTEXT.getDir("filesdir", Context.MODE_PRIVATE) + "/file.file");
            if (!file.exists())
            {
                return null;
            }

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            savedObj = ois.readObject();
            ois.close();

            return savedObj;
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
            return null;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

您需要转换您加载的对象()。CONTEXT 是一个 Activity 或 ApplicationContext 来访问缓存目录。您可以使用 Environment.getExternalStorageState() 来获取目录路径。不要忘记添加它“/文件名”。

于 2012-09-25T16:54:23.970 回答