2013-05-18 101 views
0

我对地理围栏API在谷歌我发起/ O 2013 Creating and Monitoring Geofences的Android创建地理围栏

工作没有在上面的链接中给出的示例的方法如下:

public void createGeofences() { 
    ........ 
    mGeofenceList.add(mUIGeofence1.toGeofence()); 
    mGeofenceList.add(mUIGeofence2.toGeofence()); 
} 

这种方法在我的活动内部的onActivityResult中,并在同一活动中,我有按钮来保存地理栅栏并调用mLocationClient.connect() - >它与示例的addGeofences()方法相同。

@Override 
private void onConnected(Bundle dataBundle) { 
    ... 
    switch (mRequestType) { 
     case ADD : 
      // Get the PendingIntent for the request 
      mTransitionPendingIntent = 
        getTransitionPendingIntent(); 
      // Send a request to add the current geofences 
      mLocationClient.addGeofences(
        mGeofenceList, pendingIntent, this); 
     ... 
    } 
} 

在这种方法中mGeofenceList为空,这不应该是因为它已经在onActivityResult方法之前更新。

问题:变量mGeofenceList在onActivityResult中更新,但在onConnected方法中访问时为空。我错在哪里?请帮忙。

回答

0

您确定您了解何时onActivityResult被调用? onActivityResult仅在先前致电startActivityForResult时才被调用,您不提。

虽然在这种情况下,这种方法的使用更聪明一点。 引述您提供的教程:

如果遇到错误,请GooglePlayServicesUtil.getErrorDialog()来检索,提示用户采取正确的行动,然后显示在DialogFragment对话框本地化对话框。该对话框可能允许用户更正问题,在这种情况下,Google Play服务可能会将结果发送回您的活动。为了处理这个结果,重写onActivityResult()方法。

  1. 也有一些是错误的谷歌游戏服务
  2. 您提示的返回对话的用户:

所以,如果你正在使用本教程的代码中,onActivityResult只有当叫GooglePlayServicesUtil.getErrorDialog()修复错误

  • 用户成功更改设置/ etc。使用其他活动
  • 活动与一些resultCode为
  • 返回既然你是最有可能运行谷歌Play服务,没有任何问题,onActivityResult不会被调用,因此您的列表始终是空的。

    我建议你将createGeofences()改为onCreate(如果你只是测试,而你没有很多)或者后台线程(如果你有很多后台线程,或者你不想减慢活动开始)

    +0

    我的第一个活动(A)是调用包含地图的活动B.在选择一个位置时,用户被带回到A,这就是调用onActivityResult的地方,并且确实收到了数据(我已经检查过Log)。但是,在onConnected(Bundle dataBundle)中检索时,变量(mGeofenceList)不包含更新的值。 现在,我已将数据返回保存在SharedPreferences中的onActivityResult中,并在需要onConnected时检索它,但仍然无法在此处找到丢失的概念。感谢您的回答:) – hshed

    +0

    噢,好吧,这解释了很多:D以防万一:您确定您正确地引用您的全局列表吗?一旦花了我多年寻找类似的错误,只是为了找出我使用本地:ArrayList myList = new ArrayList();而不是全局的:myList = new ArrayList();我知道这很愚蠢,但是,有时候还是会发生的。 – daemontus

    +0

    是的,它是全球性的。它已经在fragment的onCreateView中实例化了 – hshed