2012-07-16 59 views
0

我一直在尋找這個bug的2天工作。我搜索了stackoverflow和Android文檔沒有運氣。lm.removeUpdate(ll);不發佈更新

我的onLocationChanged代碼中有一個計數器,它計算它被調用的次數,如果我將箭頭從電話上的活動屏幕退出並返回,每次更新計數器將增加2。如果我退出箭頭並更新GPS,計數器記錄onLocationChanged仍然被調用,即使屏幕在後臺並且onPause已被調用。如果我使用backarrow進出活動,則根據輸入活動屏幕的次數,每個GPS輸入發送的更新次數可以多於兩次。

所有的GPS代碼工作,但這些多個實例不能很好,他們搞砸了我想做的其他事情,如兩次更新之間的距離。

這是我認爲是我的代碼的相關部分。很明顯,我忽略了主要部分,但重點在於在向後箭頭出現後返回到此屏幕後,根據我返回屏幕的次數,單次發送GPS數據點將n變量遞增多於一個變量。

我必須做一些明顯的事情,但我找不到它。

public class Data extends Activity { 


protected LocationListener ll; 
protected LocationManager lm; 
static int n = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.data); 
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener ll = new mylocationlistener(); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
} 


    class mylocationlistener implements LocationListener{ 
     @Override 
     public void onLocationChanged(Location location) { 
      if (location != null){ 
       n = n + 1; 
            textData.setText("\n" + n); 
          } 
    } 

 @Override 
    protected void onPause() { 
     if(lm != null) { 
      lm.removeUpdates(ll); 
     } 
     ll = null; 
     lm = null; 
     super.onPause(); 
    } 

我唯一的線索是,這使得如果我拿lm.removeUpdates(LL)出如果(LM!= NULL),那麼代碼崩潰我認爲lm必須爲空,並且lm.removeUpdates(ll)必須是正確的,但它與我能找到的所有示例以及Android文檔相匹配。

請幫忙。

回答

3
LocationListener ll = new mylocationlistener(); 

LocationListener是您的本地方法的onCreate(),所以你的LocationManager lm.So當你刪除其未與您聲明爲類變量的經理和聽衆的工作更新。 只需寫爲

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
ll = new mylocationlistener(); in your onCreate(). 
+0

謝謝。一旦你指出,這是非常明顯的。你已經解決了我的問題! – 2012-07-16 03:45:21

+0

不客氣 – Rasel 2012-07-16 03:45:57