2016-03-24 15 views
0

私は5秒ごとにrequestLocationUpdates =>を持っている、場所が更新されます。そして、私は5秒ごとに距離を計算し、それを配列に格納したいと考えています。また、配列にlocation.getSpeedも格納したいので、配列に保存された速度を使用して次のインターフェイスにグラフを描画することができます。あなたはさまざまなオプションを持っているstoring dataについてアンドロイドスタジオストアの速度と距離を計算

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

あなたの問題は何ですか?距離を計算し、データを保存し、配列/アーリーリストにデータを入力しますか? – yennsarah

+0

私はdistanceBetweenを使用すると2つの場所が必要ですが、毎回1つしか取得できません。以前の場所を保存する方法はわかりません。また、私はアンドロイドに慣れ親しんでいます。このコードを書いて、配列を作成して速度を保存するのは難しいです。私はdistanceBetweenが配列リストに格納されていることを知っています。しかし、私はこのメソッドでこれを行う方法を知りません。このメソッドは5秒ごとに実行されるため、データが重複している場合は何もしません。 –

答えて

0

: はここに私のコードです。 databaseを使用すると、データを入力して読むことができ、次にアプリケーションを使用するときに再び読むことができます。現在のアプリのライフサイクルでデータのみを永続化したい場合は、カスタムオブジェクトのArrayListを使用することをおすすめします。 ArrayList<LocationObject>使い方の簡単な例:

あなたのランニング Activity
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 

} 

、メソッド内でグローバル(ない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を使って距離を計算したい、それを私の方法に入れる方法は?私はこのメソッドは、すべての場所を保存することは私の目的ではない、私はちょうど前のものと現在のものを取得したいと思うdisを計算するたびに1つの場所を得ることができることを意味します。 –

+0

私は自分の答えを編集しました、これはあなたが知らなかったものでしたか? – yennsarah

+0

私はあなたが何を意味しているのかを見てみましょう –