2015-10-03 3 views
0

В настоящее время я разрабатываю приложение для Android, которое может отслеживать положение. Есть две части моего приложения:изменение положения камеры маркера каждые 10 секунд без обновления googlemap

  1. обновление данных (долгота, широта) на сервер
  2. получать данные с сервера каждые 10 секунд и показать его на Googlemap (маркер)

Моя первая часть выполнена, и во второй части я получаю значение с сервера. Но проблема возникает, когда я sync моя карта с новыми значениями - каждый раз, когда она обновляет всю карту.

Если у кого-то есть представление о том, как добиться этого эффекта от возможности запуска приложения Android и увидеть, как маркер динамически изменяется, он был бы очень признателен!

public class user_page extends FragmentActivity implements 
OnMapReadyCallback { 
double longi=0,lati=0; 
int id=0; 
MapFragment mapFragment; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tim); 

    try 
    { 
     mapFragment = (MapFragment) getFragmentManager() 
       .findFragmentById(R.id.map); 

    } 
    catch(Exception e) 
    { 
     Log.d("error",e.toString()); 
    } 
    final Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 

      new logincheck().execute(); 

       Toast.makeText(getApplicationContext(),"longi = " + longi + "latii = " +lati,Toast.LENGTH_SHORT).show(); 
      h.postDelayed(this, 10000); 
     } 
    }, 10000); 


} 


@Override 
public void onMapReady(GoogleMap googleMap) { 


    LatLng current = new LatLng(longi, lati); 

    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(current, 13)); 

    googleMap.addMarker(new MarkerOptions() 
      .title(""+id) 
      .position(current)); 



} 
// end of class user_page 

public class logincheck extends AsyncTask<String, Void, String> { 


    HashMap<String, String> data; 
    ArrayList<HashMap<String, String>> dataFromdb; 

    public logincheck() 
    { 
     dataFromdb = new ArrayList<HashMap<String, String>>(); 
    } 


    @Override 
    protected String doInBackground(String... params) { 
     id = getIntent().getIntExtra("id",0); 
     StringBuilder result = new StringBuilder(""); 
     String line =""; 

     HttpClient client = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet("mylink?id=" +id); 

     try 
     { 
      HttpResponse responce = client.execute(httpget); 
      BufferedReader in = new BufferedReader(new InputStreamReader(responce.getEntity().getContent())); 
      while((line= in.readLine()) != null) 
      { 
       result.append(line); 
      } 
      in.close(); 
     } 
     catch(Exception e) 
     { 
      Log.e("error in do in background", e.getMessage()); 
     } 

     return result.toString(); 
    } 


    protected void onPostExecute(String result) { 
     ArrayList<HashMap<String, String>> mydata = parseJson(result); 
     for(int i=0;i < mydata.size();i++) 
     { 
      longi = Double.parseDouble(mydata.get(i).get("logi")); 
      lati = Double.parseDouble(mydata.get(i).get("lati")); 

     } 
     try { 
      mapFragment.getMapAsync(user_page.this); 
     } 
     catch(Exception e) 
     { 
      Log.d("error",e.toString()); 
     } 

    } 

    private ArrayList<HashMap<String, String>> parseJson(String stringdata) 
    { 
     dataFromdb.clear(); 
     try 
     { 


      JSONArray jsonarray = new JSONArray(stringdata); 
      JSONObject jsondata = null; 

      for(int i=0;i<jsonarray.length();i++) 
      { 
       NumberFormat n = NumberFormat.getInstance(); 
       data = new HashMap<String, String>(); 
       jsondata = jsonarray.getJSONObject(i); 
       data.put("logi",jsondata.getString("logi")); 
       data.put("lati",jsondata.getString("lati")); 

       dataFromdb.add(data); 
      } 

     } 
     catch(JSONException e) 
     { 
      Log.e("error in parsing ",e.getMessage()); 
     } 

     return dataFromdb; 
    } 

} 
} 

ответ

1

Попробуйте использовать

googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 13)); 

когда вы получаете новый лат и LNG. Это должно плавно анимироваться от текущей позиции до новой позиции

+0

Можете ли вы дать мне отредактированный код, я думаю, что я помещаю его в неправильное место – honda