使用产品:supermap-imobile-10.2.1-228-android-zip-chs 操作系统:huawei nova10,鸿蒙2,安卓11;
数据类型:文件型
问题详细描述:使用浅谈SuperMap iMobile for Android在Android Studio平台开发应用这个文章中的步骤,集成,进入页面崩溃。
报错信息:
Process: com.bonc.ioc.demo.supermap, PID: 10261 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bonc.ioc.demo.supermap/com.bonc.ioc.demo.supermap.DemoActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.FileOutputStream.close()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2976) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3113) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1858) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6820) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.FileOutputStream.close()' on a null object reference at com.supermap.data.Environment.writeFile(Environment.java:2320) at com.supermap.data.Environment.checkDevice_New(Environment.java:836) at com.supermap.data.Environment.initialization(Environment.java:626) at com.bonc.ioc.demo.supermap.DemoActivity.onCreate(DemoActivity.java:25) at android.app.Activity.performCreate(Activity.java:7224) at android.app.Activity.performCreate(Activity.java:7213) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956)
gradle配置:
plugins {
id 'com.android.library'
}
android {
compileSdk 32
defaultConfig {
minSdk 23
targetSdk 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk{
abiFilters 'armeabi-v7a'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation files('libs\\amqp-client-4.11.3.jar')
implementation files('libs\\chartengine.jar')
implementation files('libs\\classes.jar')
implementation files('libs\\com.github.mikephil.charts.jar')
implementation files('libs\\com.huawei.hms.arenginesdk3.0.0.11.jar')
implementation files('libs\\com.supermap.ai_v1021.jar')
implementation files('libs\\com.supermap.analyst_v1021.jar')
implementation files('libs\\com.supermap.ar_v1021.jar')
implementation files('libs\\com.supermap.data_v1021.jar')
implementation files('libs\\com.supermap.mapping_v1021.jar')
implementation files('libs\\com.supermap.mdatacollector_v1021.jar')
implementation files('libs\\com.supermap.messagequeue_v1021.jar')
implementation files('libs\\com.supermap.navigation_v1021.jar')
implementation files('libs\\com.supermap.plot_v1021.jar')
implementation files('libs\\com.supermap.realspace_v1021.jar')
implementation files('libs\\com.supermap.services_v1021.jar')
implementation files('libs\\com.supermap.track_v1021.jar')
implementation files('libs\\gson-2.2.2.jar')
implementation files('libs\\httpmime-4.1.1.jar')
implementation files('libs\\Java-WebSocket-1.3.5.jar')
implementation files('libs\\jaxb-api-2.2.2.jar')
implementation files('libs\\jsoup-1.10.1.jar')
implementation files('libs\\lang3-3.1.0.jar')
implementation files('libs\\log4j-1.2.17.jar')
implementation files('libs\\netty-all-4.1.36.Final.jar')
implementation files('libs\\okhttp-3.9.0.jar')
implementation files('libs\\okio-1.13.0.jar')
implementation files('libs\\OpenGLTileExtent.jar')
implementation files('libs\\pinyin4j-2.5.1.jar')
implementation files('libs\\slf4j-api-1.7.26.jar')
implementation files('libs\\slf4j-log4j12-1.7.26.jar')
implementation files('libs\\starcore_android_r3.76.jar')
implementation files('libs\\tensorflow-mobile.jar')
implementation files('libs\\xercesImpl-2.12.0.jar')
implementation files('libs\\XML-json.jar')
}
menifest配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bonc.ioc.demo.supermap">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"/>
<application>
<activity
android:name=".DemoActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
java代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MapControl mapControl = null;
String rootPath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
//设置许可文件路径(默认路径“/SuperMap/license/”)
Environment.setLicensePath(rootPath + "/SuperMap/license/");
//组件功能必须在Environment初始化之后才能调用
Environment.initialization(this);
setContentView(R.layout.activity_demo);
//打开工作空间
Workspace m_workspace = new Workspace();
WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
info.setServer(rootPath + "/SampleData/GeometryInfo/World.smwu");
info.setType(WorkspaceType.SMWU);
m_workspace.open(info);
//将地图显示控件和工作空间关联
MapView m_mapView = findViewById(R.id.Map_view);
mapControl = m_mapView.getMapControl();
mapControl.getMap().setWorkspace(m_workspace);
//打开工作空间中的第二幅地图
String mapName = m_workspace.getMaps().get(1);
mapControl.getMap().open(mapName);
mapControl.getMap().refresh();
}