2012-07-16 60 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