問題:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.express_delivery/com.example.express_delivery.MainActivity}: java.lang.InstantiationException: java.lang.Class<com.example.express_delivery.MainActivity> has no zero argument constructor
並且軟件進入后直接閃屏退出
其錯誤圖:
解決:
我上網搜了很多,他們的問題大都和我的不一樣
參考博客:
https://blog.csdn.net/dukongjian/article/details/87385491
https://www.cnblogs.com/z1141000271/p/7905912.html
其他的我就不寫了,因為我看過之后,問題前半部分一樣,但是后面不一樣了就,(當然我也按着他們的來了一下,還是會出問題)於是我就接着檢查和官方給的步驟,哪不一樣,
后來發現當時寫的時候,有一點是不太明白
這句話中的mBaiduMap是怎么來的,我就又上網搜了搜(還看了看以前搜的百度地圖定位的案例代碼),后來終於找到了
1.首先是需要在代碼的開始,定義一下
2.然后獲取地圖層
然后才能使用他,完成我剛才不確定的那段代碼
//開啟地圖的定位圖層 mBaiduMap.setMyLocationEnabled(true);
完整的MainActivity.java

package com.example.express_delivery; import androidx.appcompat.app.AppCompatActivity; import android.companion.WifiDeviceFilter; import android.os.Bundle; import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDLocation; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; public class MainActivity extends AppCompatActivity { private MapView mMapView = null; private BaiduMap mBaiduMap; private LocationClient mLocationClient; private MyLocationListener mLocationListener; //是否是第一次定位,如果是第一次定位的話要將自己的位置顯示在地圖的中間 private boolean isFirstLocation = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各組件之前初始化context信息,傳入ApplicationContext //注意該方法要在setContextView 方法之前實現 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //獲取地圖控件引用 mMapView = findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); //開啟地圖的定位圖層 mBaiduMap.setMyLocationEnabled(true); //initLocation(); //定位初始化 mLocationClient = new LocationClient(this); //通過LocationClientOption設置LocationClient相關參數 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打開gps option.setCoorType("bd09ll"); // 設置坐標類型 option.setScanSpan(1000); //設置locationClientOption mLocationClient.setLocOption(option); //注冊LocationListener監聽器 MyLocationListener myLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(myLocationListener); //開啟地圖定位圖層 mLocationClient.start(); } private void initLocation() { //定位初始化 mLocationClient = new LocationClient(this); //通過LocationClientOption設置LocationClient相關參數 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打開gps option.setCoorType("bd09ll"); // 設置坐標類型 option.setScanSpan(1000); //設置locationClientOption mLocationClient.setLocOption(option); //注冊LocationListener監聽器 MyLocationListener myLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(myLocationListener); //開啟地圖定位圖層 mLocationClient.start(); } public class MyLocationListener extends BDAbstractLocationListener{ @Override public void onReceiveLocation(BDLocation location){ //mapView 銷毀后不再處理新接收的位置 if(location == null || mMapView == null){ return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此處設置開發者獲取到的方向信息,順時針0-360 .direction(location.getDirection()).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if(isFirstLocation){ //獲取經緯度 LatLng ll = new LatLng(location.getLatitude(),location.getLongitude()); MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll); //mBaiduMap.setMapStatus(status);//直接到中間 mBaiduMap.animateMapStatus(status);//動畫的方式到中間 isFirstLocation = false; } } } @Override protected void onResume(){ super.onResume(); //在activity執行onResume 時,執行mMapView.onResume(),實現地圖生命周期管理 mMapView.onResume(); } @Override protected void onPause(){ super.onPause(); //在activity執行onPause 時,執行mMapView.onPause(),實現地圖生命周期管理 mMapView.onPause(); } @Override protected void onDestroy(){ super.onDestroy(); mLocationClient.stop(); mBaiduMap.setMyLocationEnabled(false); //在activity執行onDestroy 時,執行mMapView.onDestroy(),實現地圖生命周期管理 mMapView.onDestroy(); mMapView = null; } }