编写了一个百度地图定位的Android程序,结果一点击就直接退出来,各位帮我看看,错误日志如下

08-09 09:19:59.057 25412-25412/? I/art: Late-enabling -Xcheck:jni
08-09 09:19:59.057 25412-25412/? I/art: Reinit property: dalvik.vm.checkjni= false
08-09 09:19:59.190 25412-25412/com.example.tsun.campusnav I/InstantRun: starting instant run server: is main process
08-09 09:19:59.210 25412-25412/com.example.tsun.campusnav I/HwCust: Constructor found for class android.app.HwCustActivityImpl
08-09 09:19:59.228 25412-25412/com.example.tsun.campusnav E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tsun.campusnav, PID: 25412
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tsun.campusnav/com.example.tsun.campusnav.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2692)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6531)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.(AppCompatDelegateImplBase.java:118)
at android.support.v7.app.AppCompatDelegateImplV9.(AppCompatDelegateImplV9.java:152)
at android.support.v7.app.AppCompatDelegateImplV11.(AppCompatDelegateImplV11.java:29)
at android.support.v7.app.AppCompatDelegateImplV14.(AppCompatDelegateImplV14.java:53)
at android.support.v7.app.AppCompatDelegateImplV23.(AppCompatDelegateImplV23.java:31)
at android.support.v7.app.AppCompatDelegateImplN.(AppCompatDelegateImplN.java:31)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:200)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:184)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:518)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:189)
at com.example.tsun.campusnav.MainActivity.(MainActivity.java:41)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1083)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2682)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:156) 
at android.app.ActivityThread.main(ActivityThread.java:6531) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 
08-09 09:19:59.235 25412-25412/com.example.tsun.campusnav I/Process: Sending signal. PID: 25412 SIG: 9

图片说明
错误信息报了空指针异常吗。你看下你的mainactivity的41引用了啥东西

新人刚开始接触Android

空指针异常嘛,在MainActivity中哪里调用了getCallback()这个方法,调用getCallback()方法的对象是null,检查一下。找不到的话把你的MainActivity代码贴出来看看。

找不呀,大佬,这是我的MainActivity代码
public class MainActivity extends AppCompatActivity {
private MapView mMapView;
private BaiduMap mBaiduMap;
//定位相关
private LocationClient mLocationClient;
private MyLocationListener mLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongitude;
private String address;
private String loactionType;
private TextView position =(TextView) findViewById(R.id.position_text_view) ;
private String str1,str2;
DecimalFormat df = new DecimalFormat("#.000000");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(MainActivity.this);
setContentView(R.layout.activity_main);
accessPermission();
initView();
initLocation();
}
private void accessPermission(){
List permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!permissionList.isEmpty()) {
String [] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
} else {
return;
}
}
private void initLocation()
{
mLocationClient = new LocationClient(MainActivity.this);
//初始化LocationClient类
mLocationListener = new MyLocationListener();
//初始化定位监听器
mLocationClient.registerLocationListener(mLocationListener);
//注册定位监听器
LocationClientOption option = new LocationClientOption();
//配置设置
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//高精度定位模式
option.setCoorType("bd09ll");
//坐标类型
option.setIsNeedAddress(true);
//当前位置
option.setOpenGps(true);
//开启gps
option.setScanSpan(1000);
//请求间隔,单位毫秒
mLocationClient.setLocOption(option);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "必须同意所有权限才能使用本程序", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
return;
} else {
Toast.makeText(MainActivity.this, "发生未知错误", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
}
}
private void initView() {
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(18.0f);
//改变地图显示比例
mBaiduMap.setMapStatus(msu);
}
@Override
protected void onStart()
{
super.onStart();
mBaiduMap.setMyLocationEnabled(true);;
mLocationClient.start();
}
@Override
protected void onStop()
{
super.onStop();
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
//给当前活动创建菜单
return true;
//允许创建的菜单显示出来
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.normal_item:
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.satellite_item:
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.my_location:
mylocation();
break;
default:
}
return true;
}
private void mylocation() {
LatLng latLng = new LatLng(mLatitude, mLongitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
Toast.makeText(MainActivity.this, address,Toast.LENGTH_SHORT).show();
position.setText("");
position.setText("经度:"+str1+"\n"+"纬度:"+str2+"\n"+"定位方式:"+loactionType);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
MyLocationData data = new MyLocationData.Builder()
.accuracy(location.getRadius())
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.build();
//构造定位数据
mBaiduMap.setMyLocationData(data);
mLatitude = location.getLatitude();
mLongitude = location.getLongitude();
address = location.getAddrStr();
if (location.getLocType() == BDLocation.TypeGpsLocation) {
loactionType="GPS";
}
if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
loactionType="网络";
}
str1 = String.valueOf(df.format(mLatitude));
str2 = String.valueOf(df.format(mLongitude));
if (isFirstIn)
{
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
//经度和纬度
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
isFirstIn = false;
Toast.makeText(MainActivity.this, address,Toast.LENGTH_SHORT).show();
position.setText("经度:"+str1+"\n"+"纬度:"+str2+"\n"+"定位方式:"+loactionType);
}
}
@Override
public void onConnectHotSpotMessage(String s,int i){ }
}

}

MainActivity代码

 public class MainActivity extends AppCompatActivity {
private MapView mMapView;
private BaiduMap mBaiduMap;
//定位相关
private LocationClient mLocationClient;
private MyLocationListener mLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongitude;
private String address;
private String loactionType;
private TextView position =(TextView) findViewById(R.id.position_text_view) ;
private String str1,str2;
DecimalFormat df = new DecimalFormat("#.000000");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(MainActivity.this);
setContentView(R.layout.activity_main);
accessPermission();
initView();
initLocation();
}
private void accessPermission(){
List permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!permissionList.isEmpty()) {
String [] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
} else {
return;
}
}
private void initLocation()
{
mLocationClient = new LocationClient(MainActivity.this);
//初始化LocationClient类
mLocationListener = new MyLocationListener();
//初始化定位监听器
mLocationClient.registerLocationListener(mLocationListener);
//注册定位监听器
LocationClientOption option = new LocationClientOption();
//配置设置
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//高精度定位模式
option.setCoorType("bd09ll");
//坐标类型
option.setIsNeedAddress(true);
//当前位置
option.setOpenGps(true);
//开启gps
option.setScanSpan(1000);
//请求间隔,单位毫秒
mLocationClient.setLocOption(option);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "必须同意所有权限才能使用本程序", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
return;
} else {
Toast.makeText(MainActivity.this, "发生未知错误", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
}
}
private void initView() {
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(18.0f);
//改变地图显示比例
mBaiduMap.setMapStatus(msu);
}
@Override
protected void onStart()
{
super.onStart();
mBaiduMap.setMyLocationEnabled(true);;
mLocationClient.start();
}
@Override
protected void onStop()
{
super.onStop();
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
//给当前活动创建菜单
return true;
//允许创建的菜单显示出来
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.normal_item:
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.satellite_item:
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.my_location:
mylocation();
break;
default:
}
return true;
}
private void mylocation() {
LatLng latLng = new LatLng(mLatitude, mLongitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
Toast.makeText(MainActivity.this, address,Toast.LENGTH_SHORT).show();
position.setText("");
position.setText("经度:"+str1+"\n"+"纬度:"+str2+"\n"+"定位方式:"+loactionType);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
MyLocationData data = new MyLocationData.Builder()
.accuracy(location.getRadius())
.latitude(location.getLatitude())
.longitude(location.getLongitude())
.build();
//构造定位数据
mBaiduMap.setMyLocationData(data);
mLatitude = location.getLatitude();
mLongitude = location.getLongitude();
address = location.getAddrStr();
if (location.getLocType() == BDLocation.TypeGpsLocation) {
loactionType="GPS";
}
if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
loactionType="网络";
}
str1 = String.valueOf(df.format(mLatitude));
str2 = String.valueOf(df.format(mLongitude));
if (isFirstIn)
{
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
//经度和纬度
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
isFirstIn = false;
Toast.makeText(MainActivity.this, address,Toast.LENGTH_SHORT).show();
position.setText("经度:"+str1+"\n"+"纬度:"+str2+"\n"+"定位方式:"+loactionType);
}
}
@Override
public void onConnectHotSpotMessage(String s,int i){ }
}

}

那个报错信息显示的41行出的错,你看下的41行是哪一句,然后去找空指针

我的问题解决了,谢谢各位大佬