2014-10-07 4 views
1

Я разрабатываю программу геообработки, и мне нужно сохранить путь пользователя.Лучший способ хранения данных о местоположении - Android

До сих пор я хранил набор строк в SharedPreferences и каждый X мин, данные будут отправляться на сервер и очищать все переменные, поэтому я не думаю, что проблемы с хранением.

Мне было интересно, есть ли лучший способ сделать это.

UPDATE: Пока SharedPreferences не поддерживает список. Я буду следовать aproach @ chiastic-security, и я сделаю класс Point, который будет иметь точки в типе float и timestamp, тогда я добавлю его в Задавать.

Это пример моего кода:

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

Пока Shared Preferences только позволяют использовать 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(); 
} 
1

Если вы храните путь, вы должны хранить List, а не Set, в противном случае вы «Я потеряю заказ. Это будет беспорядок точек, а не то, что вы можете отслеживать с течением времени.

Невозможно сказать гораздо больше, потому что мы не знаем, что находится в point, но String кажется странным выбором. Я ожидаю, что пользовательский класс будет хранить широту и долготу и, возможно, высоту (double). Он также может хранить временную метку (long), и если да, то тогда Set будет в порядке, потому что вы можете восстановить заказ (хотя List все равно будет более естественным).

Вам необходимо убедиться, что класс реализует Parcelable.

1

Если имеется несколько настроек, может быть лучше использовать sqlite для хранения и поиска местоположений. Это простой пример того, как вы можете хранить данные на sqlite. http://www.vogella.com/tutorials/AndroidSQLite/article.html

Я надеюсь, что это работает для вас

+0

Это может быть очень полезным в случае необходимости хранить в течение длительного периода времени, но в этом случае мы пытаемся хранить информацию в течение определенного периода времени. Спасибо, в любом случае! – kike

0

Here это решение, которое я нашел после проведения некоторых исследований. Это, я думаю, это единственный сервис, который может быстро индексировать, хранить и извлекать данные, не влияя на производительность системы.

В ваших приложениях может возникнуть необходимость не иметь дело с этой трудоемкой задачей, аналогичной тому, как вы будете обращаться к поставщику услуг сопоставления и использовать его.

Он анализирует данные GPS для вас в режиме реального времени, поэтому вы можете использовать анализируемую информацию для управления вашими приложениями и услугами и предоставлять решения своим клиентам.

Смежные вопросы