Java Android-boolean com.google.Android.gms.common.api.GoogleApiClient.isConnected();关于空对象引用

Java Android-boolean com.google.Android.gms.common.api.GoogleApiClient.isConnected();关于空对象引用,java,android,google-maps,android-fragments,Java,Android,Google Maps,Android Fragments,我的fragment类出错,它的状态是 java.lang.NullPointerException:尝试在fragment.HomeFragment.onResume上的空对象引用上调用虚拟方法“boolean com.google.android.gms.common.api.GoogleAppClient.isConnected() 这是我关于HomeFragment的部分代码 private GoogleApiClient mGoogleApiClient; @Override pu

我的fragment类出错,它的状态是

java.lang.NullPointerException:尝试在fragment.HomeFragment.onResume上的空对象引用上调用虚拟方法“boolean com.google.android.gms.common.api.GoogleAppClient.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();
}
我还实施了

  • onmapredycallback
  • GoogleAppClient.ConnectionCallbacks
  • GoogleAppClient.OnConnectionFailedListener
  • 位置侦听器
  • DirectionFinderListener

  • 有人能帮我吗?

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

    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();
    }
    

    是否在私有同步的void buildGoogleAppClient()上?是。此外,如果只调用
    onCreate
    中的
    buildGoogleAppClient()
    方法,甚至不需要使用synchronized。它总是会被主线程调用,所以没有同步问题我这样做了,但现在我得到的错误声明是>必须调用addApi()来添加至少一个API@nao,那么您应该至少添加一个Api-异常消息通常至少会有所帮助。@nao我用正确的方法编辑了我的答案,构建了
    GoogleAppClient
    的可能副本。我们需要的两个部分中只有一个相关的代码部分:你从来没有告诉我们你在哪里分配了
    mGoogleApiAgent
    @M.Prokhorov我编辑了我的帖子。考虑到你添加的部分,我的链接甚至比以前更相关。