Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储android应用程序ArrayList内容的最佳方法?_Java_Android - Fatal编程技术网

Java 存储android应用程序ArrayList内容的最佳方法?

Java 存储android应用程序ArrayList内容的最佳方法?,java,android,Java,Android,我知道android应用程序中有几种保存数据的方法,但我想知道最简单和/或最有效的方法是什么,或者换句话说,哪种方法在复杂性/合理性/性能上会胜出 基本上我只有两个类ArrayList(类对象的ArrayList,而不是基本数据类型)。一个ArrayList对象的构造函数接受三个整数,另四个整数。我基本上需要存储这些整数的值(我为每个设置了方法,以返回字符串或整数形式的整数),并以一种方式告诉每个整数属于什么 例如,如果我有: 返回1,2,3的arrayListOne.get(1).getNum

我知道android应用程序中有几种保存数据的方法,但我想知道最简单和/或最有效的方法是什么,或者换句话说,哪种方法在复杂性/合理性/性能上会胜出

基本上我只有两个类ArrayList(类对象的ArrayList,而不是基本数据类型)。一个ArrayList对象的构造函数接受三个整数,另四个整数。我基本上需要存储这些整数的值(我为每个设置了方法,以返回字符串或整数形式的整数),并以一种方式告诉每个整数属于什么

例如,如果我有: 返回1,2,3的arrayListOne.get(1).getNumbers() 返回1,2,3,4的arrayListTwo.get(1).getNumbers()


还有一堆其他的索引,它们会返回不同的数字,我如何存储这些数据,这样当应用程序关闭并重新启动时,它会被重新加载,并且这些值与它们初始化时的索引保持一致

我发现将对象保存为JSON字符串非常简单有效。 查看GSON库。它将从JSON转换为java,再从java转换回JSON,只需很少的修改


我喜欢GSON做这件事。

将其写入内部存储是一种解决方案。可以将以下内容用作Util类中的静态方法:

检索ArrayList:

final static String OBJECT_1_LIST = "object_1_list";
static ArrayList<MyObject1> object1List = null;

static ArrayList<MyObject1> getObject1List(Context mContext) {
    FileInputStream stream = null;

    try {
        stream = mContext.openFileInput(OBJECT_1_LIST);
        ObjectInputStream din = new ObjectInputStream(stream);
        object1List = (ArrayList<MyObject1>) din.readObject();
        stream.getFD().sync();
        stream.close();
        din.close();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
    }

    if (object1List == null) {
        object1List = new ArrayList<MyObject1>();
    }

    return object1List;
}
private static void updateObject1List(Context mContext) {
    FileOutputStream stream = null;

    try {
        stream = mContext.openFileOutput(OBJECT_1_LIST,
                Context.MODE_PRIVATE);
        ObjectOutputStream dout = new ObjectOutputStream(stream);
        dout.writeObject(object1List);
        stream.getFD().sync();
        stream.close();
        dout.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
要添加项目,请执行以下操作:

static void addToObject1list(Context mContext, MyObject1 obj) {
    Utilities.getObject1List(mContext).add(obj);
    Utilities.updateObject1List(mContext);
}
添加用于删除项和清除ArrayList的方法

您还需要
MyObject1
来实现
Serializable

public class MyObject1 implements Serializable {
    ....
    ....
}

Serializable
在移动设备上速度较慢,您应该实施
Parcelable
instead@JBirdVegas
可序列化在移动设备上速度较慢
。同意。但是,请看一看::
包不是通用的序列化机制。此类(以及用于将任意对象放入地块的相应Parcelable API)设计为高性能IPC传输。因此,将任何地块数据放入永久性存储是不合适的:地块中任何数据的基础实现中的更改都可能导致旧数据无法读取。
Ahh好的,我错过了关于永久性存储的部分。谢谢。我如何使用sharedPrefs?RuchirBaronia您的
ArrayList
包含什么类型的对象?是动态索引吗?比如涉及web服务或静态数据