如何存储对象的Arraylist来存储和从SDCard中检索

时间:2012-07-13 19:46:31

标签: android

我有像

这样的对象的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中检索?

3 个答案:

答案 0 :(得分:1)

您有几个选择:

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

你这样做:

  //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" />。如果您有任何疑问,请告诉我。

我希望这有帮助!