2013-09-23 56 views
0

我有2個的AsyncTask,1從服務器獲取數據(位置),然後設置一個標記在地圖上的這個位置和更新位置環路另一個電話1 Asyntask。 這裏我的代碼:的Android - 呼叫從一個的AsyncTask用的AsyncTask無限循環

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 result", 
        Toast.LENGTH_SHORT).show(); 

     } else if (find_status.equals("2012")) { 
      for (Marker marker:markers){ 
       if(marker.getTitle().equals(compFollow)){ 
        marker.remove(); 
       } 
      } 
      for (int i=0; i<number;i++){ 
       comp = new Comp(jsonComp.getJsondata(i)); 
       SetMarkerComp(comp); 
       try { 
        Thread.sleep(1400); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

public class AsynFollow extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     if (!taxiFollow.equals("")) { 
      number = 1; 
      txt_search = compFollow; 
      find_url = "http://192.111.125.80:8001/Default.aspx?username=" 
         + Id + "&password=" + Pass + "&sohieuxe="+txt_search; 
      while (!stop){ 
       new AsynComp().execute(); 
       try { 
        Thread.sleep(1500); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      taxiFollow = ""; 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     if (!compFollow.equals("")) { 
      Toast.makeText(getBaseContext(), "Follow "+compFollow, Toast.LENGTH_SHORT).show(); 
     } else { 
      iv_theodoi.setVisibility(View.VISIBLE); 
      iv_theodoif.setVisibility(View.GONE); 
      Toast.makeText(getBaseContext(), "Plz choose a marker", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

,我有2 buuton,1調用AsynFollow.execute(),另一種阻止它。 此代碼可以運行,但應用會在一段時間後強制關閉。 任何解決方案?謝謝。 P/s:我是Android的新手。

回答

1

你shoulnd您的AsyncTask這一點。對於重複動作,如在某個時間間隔內更改狀態,請使用Timer類。通過這種方式,您可以實施可以間隔重複的重複動作。

這樣你就可以通過點擊收聽停止這段時間。您可以運行兩次並使用其他變量指定它的實數。

如果您是新手,您應該閱讀Android中的多任務處理:Timer,AsyncTask,Handler

在我看來這個文檔會告訴你比成千上萬的計算器的意見更多。

+0

非常感謝你渣土湯米,我的問題與定時器解決。 –

+0

不客氣! – TommyNecessary