0

我有像这样的对象的 ArrayList

ArrayList<DataCCHeading>CC1=new ArrayList<DataCCHeading>();
ArrayList<DataCCHeading>hd=new ArrayList<DataCCHeading>(result);

for (DataCCHeading dataCCHeading : hd)
{
    if(dataCCHeading.Ownername==TAG_CC1HeadingData)
    {
        CC1.add(dataCCHeading);
    }
}

我想要做的是存储外部存储 SDCard,以便以后可以获取该数据,否则我必须从服务器再次请求它。我的问题是如何存储对象的 Arraylist 以从 SDCard 存储和检索?

4

3 回答 3

1

你有几个选择:

Java序列化:只需让你的类实现Serializable,并编写适当的序列化和反序列化逻辑,你就可以将它们写入文件并读回。请参阅本教程:http ://www.tutorialspoint.com/java/java_serialization.htm

JSON 序列化:使用库列表 GSON,您可以将对象序列化为 JSON 数组作为文本文件,将其保存到文件中。然后将其作为 JSON 字符串读回,并再次使用 GSON 库将其转换回对象的数组列表。

使用内置 SQLiteDatabase:将您的对象作为数据行存储在 sqlite 数据库中。类成员将作为列存储在表中。要将它们转换回数组,只需从表中检索所有行,一一构建对象并将它们添加到数组列表中。

于 2012-07-13T20:00:20.270 回答
0

您可能希望先将其序列化为某些内容(例如:使用 JYaml)。

然后您可以轻松地进行反序列化/序列化,并且非常节省空间。

于 2012-07-13T19:52:23.433 回答
-2

你这样做:

  //use getExternalStorageState to determine if there is an sd card
  if (Environment.getExternalStorageState() == null) {
                    directory = new File(Environment.getDataDirectory()
                            + "/RobotiumTestLog/");
                    photoDirectory = new File(Environment.getDataDirectory()
                            + "/Robotium-Screenshots/");
                    /*
                     * this checks to see if there are any previous test photo files
                     * if there are any photos, they are deleted for the sake of
                     * memory
                     */
                     //if the directory exists, delete files in directory
                    if (photoDirectory.exists()) {
                        File[] dirFiles = photoDirectory.listFiles();
                        if (dirFiles.length != 0) {
                            for (int ii = 0; ii <= dirFiles.length; ii++) {
                                dirFiles[ii].delete();
                            }
                        }
                    }
                    // if no directory exists, create new directory
                    if (!directory.exists()) {
                        directory.mkdir();
                    }

                    // if phone DOES have sd card
                } else if (Environment.getExternalStorageState() != null) {
                    // search for directory on SD card
                    directory = new File(Environment.getExternalStorageDirectory()
                            + "/RobotiumTestLog/");
                    photoDirectory = new File(
                            Environment.getExternalStorageDirectory()
                                    + "/Robotium-Screenshots/");
                    if (photoDirectory.exists()) {
                        File[] dirFiles = photoDirectory.listFiles();
                        if (dirFiles.length > 0) {
                            for (int ii = 0; ii < dirFiles.length; ii++) {
                                dirFiles[ii].delete();
                            }
                            dirFiles = null;
                        }
                    }
                    // if no directory exists, create new directory to store test
                    // results
                    if (!directory.exists()) {
                        directory.mkdir();
                    }
                }

这是一个非常简单的过程。我在这里所做的是检查是否有 SD 卡,如果有,我搜索目录,如果没有目录,我创建一个。如果有目录并且有内容,我会删除它。你不必做所有这些。如果你喜欢,你可以使用Environment.getExternalStorageDirectory(). 这将获得 SD 卡。从那里你创建一个bufferedWriter并写。您还需要<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />在清单中添加。如果您有任何问题,请告诉我。

我希望这有帮助!

于 2012-07-13T19:55:13.630 回答