如何在Android中保存数据并在没有DB的情况下将其用于将来使用?

时间:2015-09-26 09:45:08

标签: android android-listview

我创建了一个ListView,它可以动态添加数据,但每当我重新启动App时,先前存储的列表都会丢失。

如何保存该列表?

3 个答案:

答案 0 :(得分:1)

您可以使用android SharedPreferences

将它们保存到本地客户端

或者,您可以编写自己的模型。 你应该在这里传递你的对象;

public boolean writeYourObjectOnLocal(File dir, YourObject yourObject) {
    ObjectOutput output = null;
    OutputStream buffer = null;
    FileOutputStream fileOutputStream = null;
    try {
        fileOutputStream = new FileOutputStream(dir.toString() + File.separator + "myFile.dat");
        buffer = new BufferedOutputStream(fileOutputStream);
        output = new ObjectOutputStream(buffer);

        output.writeObject(yourObject);
        return true;
    } catch (Throwable e) {
        return false;
    } finally {
        try {
            output.close();
        } catch (Throwable e) {}
        try {
            buffer.close();
        } catch (Throwable e) {}
        try {
            fileOutputStream.close();
        } catch (Throwable e) {}
    }
}

你可以阅读你的对象;

public YourObject readYourObjectFromLocal(File dir) {
    ObjectInput input = null;
    BufferedInputStream buffer = null;
    FileInputStream fileInputStream = null;
    try {
        String fileName = dir.toString() + File.separator + "myFile.dat";
        fileInputStream = new FileInputStream(fileName);
        buffer = new BufferedInputStream(fileInputStream);

        input = new ObjectInputStream(buffer);
        return (YourObject)input;

    } catch (Throwable e) {
        return null;
    } finally {
        try {
            input.close();
        } catch (Throwable e) {
        }
        try {
            fileInputStream.close();
        } catch (Throwable e) {
        }
        try {
            buffer.close();
        } catch (Throwable e) {
        }
    }
}

答案 1 :(得分:0)

我建议你使用像Reservoir这样的缓存库。检查如何在此链接上使用它的说明。 https://github.com/anupcowkur/Reservoir

确保在应用程序类中分配足够的内存(以字节为单位)。

示例:保存数据(异步):

// it can be any type of object (here is String)
List<String> strings = new ArrayList<String>();
strings.add("one");
strings.add("two");
strings.add("three");
Reservoir.putAsync("myListKey", strings, new ReservoirPutCallback() {
        @Override
        public void onSuccess() {
            //success
        }

        @Override
        public void onFailure(Exception e) {
            //error
        }
    });        

示例:读取已保存的数据(异步):

Reservoir.getAsync("myListKey", new TypeToken<List<String>>() {}.getType(), 
    new ReservoirGetCallback<List<String>>() {
        @Override
        public void onSuccess(List<String> strings) {
            //success - set your list adapter and show those items
        }

        @Override
        public void onFailure(Exception e) {
            //error
        }
    }); 

答案 2 :(得分:0)

如果您需要保留大量数据,则应使用SQLite数据库,最好用于此目的。但是你也可以使用xml存储你的数据,xml比SQLite数据库慢。

您可以参考此标准Storage options