2016-03-11 104 views
0

我正在開發一個android應用程序,並且我在其中一個活動上有一個google map。地圖包含一個標記,標記的座標將每隔10秒更新一次。座標將從服務器獲得。 問題:如何更新地圖上的標記位置?x秒後更新標記

這裏是我的mapsActivity.java是什麼樣子:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 

private String lat = "-25.4316562"; 
private String lon = "50.6602371"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

} 

public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    LatLng sydney = new LatLng(-100, 35); 
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker on the drone")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    CameraUpdate zoom=CameraUpdateFactory.zoomTo(17); 
    mMap.animateCamera(zoom); 
} 

我有2個功能,將更新全局變量通過發送SSH命令到服務器LAT和LON:

new getXCoordinates().execute(); 
new getYCoordinates().execute(); 

我嘗試調用函數來更新OnCreate函數中的座標和標記,但這不起作用。 我無法找到如何在10秒後重復調用一個函數來更新標記。

+0

當handler.postDelayed(this,10000)時,Im有java.lang.NullPointerException錯誤;被執行。 –

回答

0

您可以使用這樣的事情:

Handler h = new Handler(); 
int delay = 10 * 1000; 

h.postDelayed(new Runnable(){ 
    public void run(){ 

     // This portion of code runs each 10s. 

     h.postDelayed(this, delay); 
    } 
}, delay); 

添加標記,你應該使用

yourMarker = googleMap.addMarker(new MarkerOptions().position(latlng)) 

,並更新使用

yourMarker.setPosition(latlng); 

這裏的關鍵是要保持一個創建標記的實例,以便您可以隨意更改其位置。

+0

當h.postDelayed(this,delay)時有Im java.lang.NullPointerException錯誤;被執行。 –

+0

你在哪裏叫它活動? –

+0

我在完整的onCreate函數中調用它。這是我做錯了什麼? –