解決問題 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo


問題:

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

https://blog.csdn.net/disanxiaoyao/article/details/80047737?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

https://blog.csdn.net/cshichao/article/details/9979621?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

 

其他的我就不寫了,因為我看過之后,問題前半部分一樣,但是后面不一樣了就,(當然我也按着他們的來了一下,還是會出問題)於是我就接着檢查和官方給的步驟,哪不一樣,

后來發現當時寫的時候,有一點是不太明白

 

 

這句話中的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;

    }
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM