2013-09-21 2 views
0

Я новичок в Android, используя Google Maps Android API v2 для своего приложения и имею проблему. Я получил позицию (Latitude, Longgitude) с сервера, моя работа установлена ​​на маркер с этой позицией на карте и автоматически обновляет положение маркера (например: 1 обновление/минута). Я могу получить позицию с сервера и показать маркер точно, но не могу автоматически обновить цикл бесконечности. Как я могу использовать кнопку для автоматического обновления маркера, а другой - для остановки? Вот мой код получить данные с сервера (использование JSON) и установите маркер:Android - Автоопределение положения маркера Google map api v2

iv_search.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      markers = new ArrayList<Marker>(); 
      listTaxi = new ArrayList<Get1Comp>(); 
      googleMap.clear(); 
      count = 1; 
      txt_search = et_search.getText().toString(); 
      find_url = "http://192.111.124.80:8001/Default.aspx?username=" 
         + Id + "&password=" + Pass + "&comp="+txt_search; 
      new AsynComp().execute(); 
      getCurrentFocus().clearFocus(); 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(et_search.getWindowToken(), 0); 
     } 
    }); 


public class AsynComp extends AsyncTask<Void, Void, Void> { 
    ProgressDialog taxiDialog; 

    @Override 
    protected Void doInBackground(Void... params) { 
     jsonComp = new JSONComp(find_url); 
     find_status = jsonComp.getJsonStatus(txt_search); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     if (find_status.equals("2013")) { 
      Toast.makeText(getBaseContext(), "No resutl", 
        Toast.LENGTH_SHORT).show(); 

     } else if (find_status.equals("2012")) { 
      for (int i=0; i<count;i++){ 
       listCom.add(new Get1Comp(jsonComp.getJsondata(i))); 
       SetMarkerComp(listComp.get(i)); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

private void SetMarkerComp (Get1Comp get1Comp){ 
    LatLng target = new LatLng(Double.parseDouble(get1Comp.getLat()), 
           Double.parseDouble(get1Comp.getLng())); 
    String compStt = get1Comp.getStt(); 
    String compNav = get1Comp.getNav(); 
    if (compStt.equals("0")) compStt = "b"; 
    else if (compStt.equals("1")) compStt = "y"; 
    else if (compStt.equals("2")) compStt = "r"; 
    else if (compStt.equals("3")) compStt = "w"; 
    Marker marker = googleMap.addMarker(new MarkerOptions() .position(target) 
              .icon(BitmapDescriptorFactory.fromResource(getIconComp(compStt, compNav))) 
              .title(get1Comp.getNo())); 
    marker.showInfoWindow(); 
    setCamPosition(target); 
    markers.add(marker); 
} 

ответ

0

вы можете использовать для и петли.

for(int i = 0; i <= 1000; i++){ 
//code here 
} 
1

hiyou являются использование этого кода

Handler locationHandler; 
final static long REFRESH = 10 * 1000; 
final static int SUBJECT = 0; 
private GoogleMap mMap; 
private Marker myMarker = null; 

и добавить на создание

locationHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      if (msg.what == SUBJECT) { 
       updateMarker(); 
       this.sendEmptyMessageDelayed(SUBJECT, REFRESH); 
      } 
     } 
    }; 
1

Вы можете попробовать это, создав функцию

public void callAsyncTask(){ 
    final Handler handler = new Handler(); 
    timer = new Timer(); 
    TimerTask doAsyncTask = new TimerTask() { 
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        try{ 

        // put your code here 
        new AsynComp().execute(); 

        }catch (Exception e){ 


        } 

       } 
      }); 
     } 
    }; 

    timer.schedule(doAsyncTask,0,10000); 

} 

и вызвать эту функцию в onCreate(), вы также можете оставить новый A synComp() выполнить(). в токе. Так что пользователь может принудительно обновить вместо автоматического,