Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 安卓保存自定义对象的小arrayList的简单方法_Java_Android_Arraylist_Altbeacon - Fatal编程技术网

Java 安卓保存自定义对象的小arrayList的简单方法

Java 安卓保存自定义对象的小arrayList的简单方法,java,android,arraylist,altbeacon,Java,Android,Arraylist,Altbeacon,我在程序中有一个小列表,我想让用户保存它,而不是每次应用程序启动时都填写它 名单如下: publicstaticarraylistsavedbeacons 通常包含多达5-10个BeaCondence对象 BeaconDevice是一个包含信标对象(来自AltBeacon库)和字符串格式名称的对象 最好的方法是什么?如果是一个小列表,您可以使用Gson库将列表转换为JSON字符串,并将其另存为SharedReferences中的字符串。请参考这个基本上构成相同用例的答案。如果是一个小列表,您可以

我在程序中有一个小列表,我想让用户保存它,而不是每次应用程序启动时都填写它

名单如下:

publicstaticarraylistsavedbeacons

通常包含多达5-10个BeaCondence对象

BeaconDevice是一个包含信标对象(来自AltBeacon库)和字符串格式名称的对象


最好的方法是什么?

如果是一个小列表,您可以使用Gson库将列表转换为JSON字符串,并将其另存为SharedReferences中的字符串。请参考这个基本上构成相同用例的答案。

如果是一个小列表,您可以使用Gson库将该列表转换为JSON字符串,并将其另存为SharedReferences中的字符串。参考这个答案,它本质上提出了相同的用例。

问题的实质是序列化和持久化对象,然后再反序列化它们。有很多方法可以做到这一点,更健壮、更复杂的解决方案通常涉及数据库(通常是Android上的SQLite)和一些对象关系映射框架

然而,这种健壮的解决方案在这种情况下可能有些过分,因为用例用于序列化和保存非常小的对象列表,每个对象都有有限数量的字段。在Android上保存小块数据的最常见方式是共享首选项。您可以通过以下方式获取对管理这些内容的对象的引用:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
一旦有了这些,就可以使用如下代码将字符串保存到持久存储:

SharedPreferences.Editor editor = preferences.edit();
editor.putString("savedBeacons", savedBeaconsAsString);
editor.apply();
String savedBeaconsAsString = preferences.getString("savedBeacons", null);
然后按如下方式加载它们:

SharedPreferences.Editor editor = preferences.edit();
editor.putString("savedBeacons", savedBeaconsAsString);
editor.apply();
String savedBeaconsAsString = preferences.getString("savedBeacons", null);
当然,以上只是将单个字符串保存到持久存储中。如何将对象列表转换为字符串,以及如何将字符串转换为对象列表。这称为序列化

有很多方法可以做到这一点,包括从JSON转换到JSON。最简单的方法之一是使用Java序列化API。这些方法的主要缺点是,如果在保存记录后在Java代码中更改对象的定义,它们可能无法反序列化(加载)对象

下面是一个将savedBeacons数组转换为字符串的示例,该字符串取自。请注意,下面的代码假设savedBeacons是一个数组,而不是代码所示的
ArrayList
。为了简单起见,我将其显示为数组,因为
ArrayList
不可序列化

// serialize
ByteArrayOutputStream out = new ByteArrayOutputStream();
new ObjectOutputStream(out).writeObject(savedBeacons);
String savedBeaconsAsString = new String(Hex.encodeHex(out.toByteArray()));

// deserialize
ByteArrayInputStream in = new ByteArrayInputStream(Hex.decodeHex(savedBeaconsAsString.toCharArray()));
savedBeacons = (BeaconDevice[]) new ObjectInputStream(in).readObject()));

问题的实质是序列化和持久化对象,然后再反序列化它们。有很多方法可以做到这一点,更健壮、更复杂的解决方案通常涉及数据库(通常是Android上的SQLite)和一些对象关系映射框架

然而,这种健壮的解决方案在这种情况下可能有些过分,因为用例用于序列化和保存非常小的对象列表,每个对象都有有限数量的字段。在Android上保存小块数据的最常见方式是共享首选项。您可以通过以下方式获取对管理这些内容的对象的引用:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
一旦有了这些,就可以使用如下代码将字符串保存到持久存储:

SharedPreferences.Editor editor = preferences.edit();
editor.putString("savedBeacons", savedBeaconsAsString);
editor.apply();
String savedBeaconsAsString = preferences.getString("savedBeacons", null);
然后按如下方式加载它们:

SharedPreferences.Editor editor = preferences.edit();
editor.putString("savedBeacons", savedBeaconsAsString);
editor.apply();
String savedBeaconsAsString = preferences.getString("savedBeacons", null);
当然,以上只是将单个字符串保存到持久存储中。如何将对象列表转换为字符串,以及如何将字符串转换为对象列表。这称为序列化

有很多方法可以做到这一点,包括从JSON转换到JSON。最简单的方法之一是使用Java序列化API。这些方法的主要缺点是,如果在保存记录后在Java代码中更改对象的定义,它们可能无法反序列化(加载)对象

下面是一个将savedBeacons数组转换为字符串的示例,该字符串取自。请注意,下面的代码假设savedBeacons是一个数组,而不是代码所示的
ArrayList
。为了简单起见,我将其显示为数组,因为
ArrayList
不可序列化

// serialize
ByteArrayOutputStream out = new ByteArrayOutputStream();
new ObjectOutputStream(out).writeObject(savedBeacons);
String savedBeaconsAsString = new String(Hex.encodeHex(out.toByteArray()));

// deserialize
ByteArrayInputStream in = new ByteArrayInputStream(Hex.decodeHex(savedBeaconsAsString.toCharArray()));
savedBeacons = (BeaconDevice[]) new ObjectInputStream(in).readObject()));

有一个简单的解决方案,这类东西的图书馆

compile 'com.google.code.gson:gson:2.4'
因此,通过导入它,您可以直接保存/检索arrylist,如下所示:

保存::

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
Type listOfBecons = new TypeToken<List<BeaconDevice>>() {}.getType();

String strBecons = new Gson().toJson(SavedBeacons, listOfBecons);
preferences.edit().putString("BECON_LIST", strBecons).apply();
SharedReferences preferences=PreferenceManager.GetDefaultSharedReferences(上下文);
类型listOfBecons=newTypeToken(){}.getType();
字符串strBecons=new Gson().toJson(SavedBeacons,listOfBecons);
preferences.edit().putString(“BECON_LIST”,strBecons.apply();
检索::

ArrayList<BeaconDevice> mSavedBeaconList = new Gson().fromJson(preferences.getString("BECON_LIST", ""), listOfBecons);
ArrayList mSavedBeaconList=new Gson().fromJson(preferences.getString(“BECON_LIST”),listOfBecons);

有一个库,可以轻松解决这类问题

compile 'com.google.code.gson:gson:2.4'
因此,通过导入它,您可以直接保存/检索arrylist,如下所示:

保存::

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
Type listOfBecons = new TypeToken<List<BeaconDevice>>() {}.getType();

String strBecons = new Gson().toJson(SavedBeacons, listOfBecons);
preferences.edit().putString("BECON_LIST", strBecons).apply();
SharedReferences preferences=PreferenceManager.GetDefaultSharedReferences(上下文);
类型listOfBecons=newTypeToken(){}.getType();
字符串strBecons=new Gson().toJson(SavedBeacons,listOfBecons);
preferences.edit().putString(“BECON_LIST”,strBecons.apply();
检索::

ArrayList<BeaconDevice> mSavedBeaconList = new Gson().fromJson(preferences.getString("BECON_LIST", ""), listOfBecons);
ArrayList mSavedBeaconList=new Gson().fromJson(preferences.getString(“BECON_LIST”),listOfBecons);

最好的方法是什么?您认为Piodo是什么?您必须存储整个对象,还是可以将蓝牙地址存储为字符串列表?我想存储整个对象。有人刚刚发布了一个帮助我的方法。最好的方法是什么?您认为Piodo是什么?您必须存储整个对象,还是可以将蓝牙地址存储为字符串列表?我想存储整个对象。有人刚刚发布了一个帮助我的方法。这个方法假设
BeaconDevice
是serializable@cricket_007Gson不需要对象