代码之家  ›  专栏  ›  技术社区  ›  BadEugene

Android MapBox膨胀错误。找不到类MapView

  •  3
  • BadEugene  · 技术社区  · 9 年前

    当我用MapBox库启动android应用程序时,我遇到异常:

    “android.view.InflateException:二进制XML文件行#9:错误 膨胀类com.mapbox.mapboxsdk.views.MapView“

    字段“原因”包含以下文本:

    java.lang.ClassNotFoundException:未找到类 路径:DexPathList[[zip文件上的“com.mapbox.mapboxsdk.views.MapView” “/data/app/com.example.my.mymapbox-2/base.apk”],nativeLibraryDirectories=[/data/app/com.example.my.my.mmapbox-2/lib/arm, /供应商/lib,/system/lib]]

    请帮忙

    这是我的代码:

    建筑坡度

    apply plugin: 'com.android.application'
    
    android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    
    defaultConfig {
        applicationId "com.example.my.mymapbox"
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    }
    
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:4.0.0-beta.2@aar'){
        transitive=true
    }
    }
    

    主活动.java

    package com.example.my.mymapbox;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    

    }

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:mapbox="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    
    <com.mapbox.mapboxsdk.views.MapView
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        mapbox:access_token="@string/accessToken"/>
    <!-- note the access token string created in the previous step -->
    </RelativeLayout>
    
    2 回复  |  直到 9 年前
        1
  •  7
  •   Yennefer    6 年前

    MapView的XML需要 com.mapbox.mapboxsdk.maps.MapView com.mapbox.mapboxsdk.views.MapView

    使用最新的Mapbox Android SDK版本时可能会有所帮助的其他内容:

        implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:8.4.0@aar'){
            transitive=true
        }
    

    确保包括所有必需的权限以及遥测服务:

        <service android:name="com.mapbox.mapboxsdk.telemetry.TelemetryService" />
    

    为了在8.4.0中控制MapView,有一个新方法叫做 getMapAsync 它监听地图何时准备好。完成后,您可以添加标记、更改相机位置等。

    以下是请求许可的方法:

    Mapbox.getInstance(this, ACCESS_TOKEN);
    

    你的 onCreate 方法应该如下所示:

        String ACCESS_TOKEN = "ACCESS_TOKEN_HERE"
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Be sure to call this setContentView
            Mapbox.getInstance(this, ACCESS_TOKEN);
    
            setContentView(R.layout.activity_main);
    
            mapView = (MapView) findViewById(R.id.mapview);
            mapView.onCreate(savedInstanceState);
    
            mapView.getMapAsync(new OnMapReadyCallback() {
                @Override
                public void onMapReady(MapboxMap mapboxMap) {
    
                    // add markers, change camera position, etc. here!
    
                }
    
        ... 
    

    最后,确保在活动生命周期中包含所有mapView方法。它看起来像这样:

        // Activity lifecycle methods
        @Override
        protected void onStart() {
            super.onStart();
            mapView.onStart();
        }
    
        @Override
        public void onResume() {
            super.onResume();
            mapView.onResume();
        }
    
        @Override
        public void onPause() {
            super.onPause();
            mapView.onPause();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            mapView.onStop();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
        }
    
        @Override
        public void onLowMemory() {
            super.onLowMemory();
            mapView.onLowMemory();
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
    
        2
  •  7
  •   Radesh    6 年前

    我也遇到了这个问题,但是当我将这个库添加到我的 dependencies

    implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.23.0'
    

    给我这个例外

    Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class com.mapbox.mapboxsdk.maps.MapView
    

    即使我不使用导航!!然后我意识到我必须在之前初始化Mapbox setContentView

    所以就这样向上移动

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //first initialize Mapbox
        Mapbox.getInstance(this, YOUR_MAPBOX_KEY);
        //then 
        setContentView(R.layout.activity_main);
    }
    

    我的问题解决了