LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient)第二次无法正常工作

时间:2017-03-01 06:43:26

标签: android location

现在我有一个奇怪的问题。 我有FusedLocationApi代码。检查它。我只提及相关代码:

    public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{

        GoogleApiClient mGoogleApiClient;
        Location mLastLocation;



        @Override
        protected void onStart() {
            mGoogleApiClient.connect();
            super.onStart();
        }


            @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


            if (mGoogleApiClient == null) {
                mGoogleApiClient = new GoogleApiClient.Builder(this)
                        .addConnectionCallbacks(this)
                        .addOnConnectionFailedListener(this)
                        .addApi(LocationServices.API)
                        .build();
            }




     mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                    double latitude = mLastLocation.getLatitude();
                    double longitude = mLastLocation.getLongitude();

}    
        @Override
        protected void onStop() {
            mGoogleApiClient.disconnect();
            super.onStop();

        }

            }

现在问题是,这段代码对于这个活动非常有效。但是当我为同一个项目的其他活动编写相同的代码时,mLastLocation返回null并且我得到了一个java .lang.NullPointerException。

该课程的唯一区别在于我还在实施OnMapReadyCallback。这有什么不同吗?

我已经阅读了有关此主题的所有问答,但没有得到任何帮助。 我身边的错误是什么?

1 个答案:

答案 0 :(得分:0)

首先调用onCreate方法,然后调用onStart。因此,如果在创建时没有连接mGoogleApiClient,它将返回null。将此代码从onCreate移动到onStart

mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                double latitude = mLastLocation.getLatitude();
                double longitude = mLastLocation.getLongitude();

我会在onStart上做这样的事情

if(mGoogleApiClient.isConnected()){
        // check for last location
    }else{
        mGoogleApiClient.connect();
        //check for last location
    }