2017-04-09 94 views
0

我收到提示我的片段类,这是状态Android的一个空对象引用

的Java -boolean com.google.android.gms.common.api.GoogleApiClient.isConnected()”。 lang.NullPointerException:尝试在fragment.HomeFragment.onResume

上的空对象引用调用虚拟方法“布尔com.google.android.gms.common.api.GoogleApiClient.isConnected()”这是我的部分代码在HomeFragment

private GoogleApiClient mGoogleApiClient; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mCurrentLocation = savedInstanceState.getParcelable(KEY_LOCATION); 
     mCameraPosition = 
savedInstanceState.getParcelable(KEY_CAMERA_POSITION); 
    }  buildGoogleApiClient(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (mGoogleApiClient.isConnected()) { 
     getDeviceLocation(); 
    } 
    updateMarkers(); 
} 

    private synchronized void buildGoogleApiClient() { 
    GoogleApiClient.Builder builder = new GoogleApiClient.Builder(getActivity()); 
    mGoogleApiClient = builder.build(); 
    //builder.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */); 
    builder.addConnectionCallbacks(this); 
    builder.addApi(LocationServices.API); 
    builder.addApi(Places.GEO_DATA_API); 
    builder.addApi(Places.PLACE_DETECTION_API); 
    builder.build(); 
    createLocationRequest(); 
} 

我还实施

  1. OnMapReadyCallback
  2. GoogleApiClient.ConnectionCallbacks
  3. GoogleApiClient.OnConnectionFailedListener
  4. LocationListener的
  5. DirectionFinderListener

有人可以帮助我?

+0

的可能的复制[什么是空指针异常,如何修复它(http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-做-I-FIX-IT)。我们只需要两个相关的代码部分:您从未向我们展示过您将“mGoogleApiAgent”分配到哪里。 –

+0

@ M.Prokhorov我编辑了我的文章。 – nao

+0

考虑到你添加的部分,我的链接甚至比它更相关。 –

回答

0

您需要保留对您正在构建的GoogleApiClient实例的引用。因此,它应该是:

private void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
     .addConnectionCallbacks(this) 
     .addApi(LocationServices.API) 
     .addApi(Places.GEO_DATA_API) 
     .addApi(Places.PLACE_DETECTION_API) 
     .build(); 
    createLocationRequest(); 
} 
+0

它是在私人同步无效buildGoogleApiClient()? – nao

+0

是的。如果只调用'onCreate'中的'buildGoogleApiClient()'方法,你甚至不需要使用synchronized。它总是会被主线程调用,所以没有同步问题 – quiro

+0

我做了,但现在我得到错误声明>必须调用addApi()添加至少一个API – nao