2014-10-07 35 views
1

我正在開發一個geofencing程序,我需要保存用戶的路徑。存儲位置數據的最佳方式 - Android

到目前爲止,我在SharedPreferences中存儲了一組字符串,每個X min數據將被髮送到服務器並清除所有變量,所以我不認爲會有存儲問題。

我想知道是否有最好的方法來做到這一點。

UPDATE: 只要SharedPreferences沒有支持列表我會遵循@ chiastic-security的意見,我將創建一個類將有浮點類型和時間戳點的點,然後我將它添加到一個組。

這是我的代碼示例:

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

只要共享偏好只允許我們使用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(); 
} 
1

如果要存儲的路徑,你應該存儲List而非Set,否則你將失去訂貨。這將是一堆點,而不是隨着時間的推移可以跟蹤的東西。

因爲我們不知道point是什麼,所以String似乎是一個奇怪的選擇,這是不可能多說的。我期望一個存儲經緯度和可能高度的自定義類(double)。它可能還會存儲一個時間戳(long),如果是,則Set將會正常,因爲您可以恢復排序(儘管List仍然更自然)。您需要確保類實現Parcelable

1

如果有多個偏好,可能會更好地使用sqlite來存儲和檢索位置。 這是一個如何在sqlite上存儲數據的簡單例子。 http://www.vogella.com/tutorials/AndroidSQLite/article.html

我希望它爲你工作

+0

如果需要長時間存儲,這可能是一個非常值得關注的問題,但在這種情況下,我們正試圖將信息存儲一段確定的時間。不管怎麼說,還是要謝謝你! – kike 2014-10-07 08:34:07

0

Here是我在做一些研究後發現的解決方案。我猜這是唯一可以在不影響系統性能的情況下快速索引,存儲和提取數據的服務。

您的應用程序可以從無需處理這個耗時的任務中受益,這與您如何訪問和使用地圖服務提供者相似。

它爲您實時分析GPS數據,因此您可以使用分析的信息來驅動您的應用程序和服務,併爲您的客戶提供解決方案。