存储位置数据的最佳方式 - Android

时间:2014-10-07 07:21:25

标签: android gps sharedpreferences storage

我正在开发一个地理围栏计划,我需要保存用户的路径。

到目前为止,我在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();
            }

4 个答案:

答案 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)

只要共享偏好设置允许我们使用intbooleanStringSet<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数据,因此您可以使用分析的信息来驱动您的应用程序和服务,并为您的客户提供解决方案。