2024-07-11 升级问题记录:
编译时出现问题,无法显示arcgis的mapview控件,具体如下:
java.lang.RuntimeException: Unable to start activity ComponentInfo{rs.tabletcropland/com.FJDZYG.GIS.MainActivity}: android.view.InflateException: Binary XML file line #35 in rs.tabletcropland:layout/main: Binary XML file line #35 in rs.tabletcropland:layout/main: Error inflating class com.esri.android.map.MapView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4800)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:5018)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:123)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3094)
at android.os.Handler.dispatchMessage(Handler.java:117)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.app.ActivityThread.loopProcess(ActivityThread.java:9998)
at android.app.ActivityThread.main(ActivityThread.java:9987)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240)
Caused by: android.view.InflateException: Binary XML file line #35 in rs.tabletcropland:layout/main: Binary XML file line #35 in rs.tabletcropland:layout/main: Error inflating class com.esri.android.map.MapView
Caused by: android.view.InflateException: Binary XML file line #35 in rs.tabletcropland:layout/main: Error inflating class com.esri.android.map.MapView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:868)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1020)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:975)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1137)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1098)
at android.view.LayoutInflater.inflate(LayoutInflater.java:696)
at android.view.LayoutInflater.inflate(LayoutInflater.java:540)
at com.android.internal.policy.HwPhoneLayoutInflater.inflate(HwPhoneLayoutInflater.java:138)
at android.view.LayoutInflater.inflate(LayoutInflater.java:487)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:593)
at com.android.internal.policy.HwPhoneWindow.setContentView(HwPhoneWindow.java:365)
at android.app.Activity.setContentView(Activity.java:3736)
at com.FJDZYG.GIS.MainActivity.onCreate(MainActivity.java:128)
at android.app.Activity.performCreate(Activity.java:8592)
at android.app.Activity.performCreate(Activity.java:8565)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1344)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4768)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:5018)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:123)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3094)
at android.os.Handler.dispatchMessage(Handler.java:117)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:293)
at android.app.ActivityThread.loopProcess(ActivityThread.java:9998)
at android.app.ActivityThread.main(ActivityThread.java:9987)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1240)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/params/BasicHttpParams;
at com.esri.core.internal.io.handler.c.<clinit>(SourceFile:218)
at com.esri.core.internal.io.handler.c.a(SourceFile:189)
at com.esri.core.internal.RuntimeHelper.c(SourceFile:104)
at com.esri.core.internal.RuntimeHelper.initialize(SourceFile:51)
at com.esri.android.map.MapSurface.<clinit>(SourceFile:68)
at com.esri.android.map.MapView.a(SourceFile:586)
at com.esri.android.map.MapView.<init>(SourceFile:621)
... 32 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.params.BasicHttpParams" on path: DexPathList[[zip file "/data/app/~~NeV1e6oii43XZZQ-8uyJfw==/rs.tabletcropland-LWlKKgzKCTuVnzp0fX2dAw==/base.apk"],nativeLibraryDirectories=[/data/app/~~NeV1e6oii43XZZQ-8uyJfw==/rs.tabletcropland-LWlKKgzKCTuVnzp0fX2dAw==/lib/arm, /data/app/~~NeV1e6oii43XZZQ-8uyJfw==/rs.tabletcropland-LWlKKgzKCTuVnzp0fX2dAw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/system_ext/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 39 more
解决方法:
从日志中可以看出,问题出在com.esri.android.map.MapView
的初始化过程中。具体原因是找不到org.apache.http.params.BasicHttpParams
类。这个类是Apache HttpClient库的一部分,但在Android应用中,通常使用org.apache.http.impl.client.DefaultHttpClient
来代替。
要解决这个问题,你需要在你的项目中添加Apache HttpClient库的依赖。如果你使用的是Gradle构建系统,可以在build.gradle
文件中添加以下依赖:
dependencies {
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
}
然后同步Gradle项目,重新编译并运行你的应用。
问题顺利解决。