我正在开发一个地理围栏计划,我需要保存用户的路径。
到目前为止,我在SharedPreferences中存储了一组字符串,每隔X分钟将数据发送到服务器并清除所有变量,因此我认为不存在存储问题。
我想知道是否有最佳方法可以做到这一点。
更新: 只要SharedPreferences没有支持List,我将遵循@ chiastic-security的方法,我将创建一个Point类,它将浮点类型和时间戳中的点,然后我将它添加到Set。
这是我的代码示例:
SharedPreferences prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
ArrayList<String> path;
public void updatePath(Points point){
path.add(point);
Set<String> mySet = new HashSet<String>(path);
prefs.edit().putStringSet("path", mySet).commit();
}
和点类
public class Points {
private Double[] coordinates;
private long timestamp;
public Points(Double[] coordinates ){
this.coordinates = coordinates;
this.timestamp = System.currentTimeMillis();
}
答案 0 :(得分:1)
如果您要存储路径,则应该存储List
而不是Set
,否则您将丢失订购。这将是一个混乱的点,而不是你可以跟踪的东西。
我们不可能说更多,因为我们不知道point
中的内容,但String
似乎是一个奇怪的选择。我希望有一个自定义类来存储纬度和经度以及可能的高度(double
)。它也可能存储时间戳(long
),如果是,那么Set
就可以了,因为你可以恢复排序(尽管List
仍然更自然)。
您需要确保该类实现Parcelable
。
答案 1 :(得分:1)
如果有多个首选项,可能可以更好地使用sqlite来存储和检索位置。 这是一个如何在sqlite上存储数据的简单示例。 http://www.vogella.com/tutorials/AndroidSQLite/article.html
我希望它适合你
答案 2 :(得分:0)
只要共享偏好设置允许我们使用int
,boolean
,String
和Set<String>
,我最终会使用ComplexReferences。
它允许我们使用我们想要使用的每个数据结构。
在我的例子中,我使用了一个对象数组Point
,因为我们需要在发送信息之前编译一个缓冲区。
ComplexPreferences complexPreferences = ComplexPreferences.getComplexPreferences(this, "mypref", Context.MODE_PRIVATE);
Points[] path = new Points[N_POINTS];
void addObj(){
complexPreferences.putObject("path", path);
complexPreferences.commit();
}
答案 3 :(得分:0)
Here是我在做一些研究后找到的解决方案。我想这是唯一能够在不影响系统性能的情况下快速索引,存储和提取数据的服务。
您的应用程序可以从不必处理这个耗时的任务中受益,类似于您访问和使用地图服务提供商的方式。
它可以为您实时分析GPS数据,因此您可以使用分析的信息来驱动您的应用程序和服务,并为您的客户提供解决方案。