2016-03-24 2 views
0

У меня есть запросLocationUpdates => каждые 5 секунд, местоположение будет обновлено. И я хочу рассчитать расстояние каждые 5 секунд, а затем сохранить его в массив. Кроме того, я хочу сохранить location.getSpeed ​​в массив, чтобы я мог использовать скорость, сохраненную в массиве, для рисования графика в следующем интерфейсе. вот мои коды:android studio магазин скорость и рассчитать расстояние

private void updateWithNewLocation(Location location) { 
    String where = ""; 
    if (location != null) { 

     double lng = location.getLongitude(); 

     double lat = location.getLatitude(); 

     float speed = location.getSpeed(); 

     long time = location.getTime(); 
     String timeString = getTimeString(time); 

     where = "Lng: " + lng + 
       "\nLat: " + lat + 
       "\nSpeed: " + speed + 
       "\nTime: " + timeString + 
       "\nProvider: " + "gps"; 


     showMarkerMe(lat, lng); 
     cameraFocusOnMe(lat, lng); 
     trackToMe(lat, lng); 

    }else{ 
     where = "No location found."; 
    } 


    txt.setText(where); 
} 
+0

Итак, в чем проблема? Вычисление расстояния, сохранение данных/ввод данных в массив/arraylist? – yennsarah

+0

, если я использую distanceBetween, он требует двух местоположений, но я могу получить только каждый раз, я не знаю, как сохранить предыдущий. Кроме того, я новичок в android, я не хочу писать в этом коде, чтобы создать массив и сохранить скорость. Я знаю, что distanceBetween хранится в списке массивов. но я не знаю, как это сделать в этом методе, так как этот метод будет запускаться каждые 5 секунд, если данные будут перекрываться. –

ответ

0

О storing data у вас есть различные варианты. Вы можете использовать database, где вы опретите свои данные, прочитайте его и сможете прочитать его снова при следующем использовании своего приложения. Если вы хотите, чтобы данные были постоянными в текущем жизненном цикле приложения, я рекомендую использовать ArrayList пользовательских объектов. Краткий пример ArrayList<LocationObject> использования:

public class LocationObject { 
    private double lng; 
    private double lat; 
    private float speed; 
    private long time; 

    public LocationObject(long time, double lng, double lat, float speed) { 
     this.time = time; 
     this.lat = lat; 
     this.lng = lng; 
     this.speed = speed; 
    } 

    //put getters & setters here, press `Alt` and `Insert`, choose the getters and setters 

} 

В вашем управлении Activity, инициализировать ArrayList глобально (не внутри методы, но внутри ваш Activity.class:

private ArrayList<LocationObject> locationList; 

//in onCreate: 
locationList = new ArrayList<LocationObject>(); 

//whenever you retrieve a location, create a LocationObject and store it into the List: 
LocationObject currentLocation = new LocationObject(time, lng, lat, speed); 
locationList.add(currentLocation); 

Теперь, если вы хотите, чтобы получить последние 2 вы просто получите к ним доступ в список:

LocationObject lastLocation = locationList.get(locationList.size() - 2); 
LocationObject currentLocation = locationList.get(locationList.size() - 1); 

//to get the latitude, don't forget to create the getters&setters in your LocationObject.class! 
double lastLat = lastLocation.getLat(); 

Редактировать: Чтобы сохранить только последнее значение, просто присвойте значения ag Локально объявленная переменная:

private Location oldLocation; 
private float[] results; 
private ArrayList<float> speedList; 


//in oncreate: 
speedList = new ArrayList<Float>(); 


private void updateWithNewLocation(Location location) { 
String where = ""; 
results = new float[100]; //[100] means there can be 100 entries - decrease or increase the number depending on your output 
if (location != null) { 

    double lng = location.getLongitude(); 
    double lat = location.getLatitude(); 
    float speed = location.getSpeed(); 
    long time = location.getTime(); 
    String timeString = getTimeString(time); 

    speedList.add(speed); 

    if(oldLocation != null){ 
     Location.distanceBetween(oldLocation.getLatitude(), oldLocation.getLongitude(), lat, lng, results); 
    } 
    oldLocation = location; 
+0

Я хочу рассчитать расстояние с помощью distanceBetween, как положить его в мой метод? Я имею в виду, что этот метод может получать только одно место каждый раз, сохраняя все местоположения не в моих целях, я просто хочу получить предыдущий и текущий, чтобы рассчитать это. –

+0

Я отредактировал свой ответ, было ли это то, чего вы не знали? – yennsarah

+0

ok Я получил то, что вы имеете в виду, lemme try –