现在我有一个奇怪的问题。 我有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
。这有什么不同吗?
我已经阅读了有关此主题的所有问答,但没有得到任何帮助。 我身边的错误是什么?
答案 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
}