runtime-error - java.lang.ExceptionInInitializerError 实例化 ReverseGeocodeRequest [Android SDK]
问题描述
我正在尝试使用 Here API ReverseGeoLocation 并且在我将包添加到我的项目并尝试从文档中运行一个示例开始得到这个运行时错误之后。
这是我的清单:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myproject.project">
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-feature android:name="android.hardware.camera" />
<permission
android:name="com.example.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.example.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<application
android:hardwareAccelerated="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data android:name="com.here.android.maps.appid" android:value="XXXXX"/>
<meta-data android:name="com.here.android.maps.apptoken" android:value="XXXXX"/>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="XXXXXX />
<activity
android:label="Na Estrada"
android:screenOrientation="portrait"
android:name=".activity.BemVindoActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.LoginActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.Cadastrar1Activity"/>
<activity
android:label=""
android:name=".activity.Cadastrar2Activity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.MenuActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.InicialActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.InicioFimTrajetoActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.OperacaoActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.DetalheDoEventoDeEmergenciaActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.DetalheDaParadaPlanejadaActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.DetalheDaRotaActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.ImagensActivity"/>
<activity
android:label=""
android:name=".activity.ParadaPlanejadaActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.FinalizarParadaSenhaActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.FinalizarParadaActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.RotasActivity"/>
<activity
android:label=""
android:screenOrientation="portrait"
android:name=".activity.EventosActivity"/>
</application>
</manifest>
我的构建.Gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.naestrada.project"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
// Jar libs
implementation(name:'HERE-sdk', ext:'aar')
implementation fileTree(dir: 'libs', include: ['*.jar'])
// Support libs
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.support:design:26.1.0'
// Supernova UI Toolkit
implementation 'io.supernova:android-ui-toolkit:1.0.1'
// Play Services
implementation 'com.google.android.gms:play-services-maps:15.0.1'
// Play Services
implementation 'com.google.android.gms:play-services-maps:10.0.1'
implementation 'com.google.maps:google-maps-services:0.2.11'
implementation 'org.slf4j:slf4j-simple:1.7.25'
// Page Control
implementation 'com.romandanylyk:pageindicatorview:1.0.0'
implementation 'org.locationtech.jts:jts-core:1.15.0'
implementation 'com.google.code.gson:gson:2.8.0'
// Unit tests dependencies
testImplementation 'junit:junit:4.12'
// Integration tests dependencies
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
还有我的代码。
private void onTirarFotoPressed() {
try {
// Implementation of ResultListener
class ReverseGeocodeListener implements ResultListener<Address> {
@Override
public void onCompleted(Address data, ErrorCode error) {
if (error != ErrorCode.NONE) {
// Handle error
} else {
Alert.OkDialog(Sys.lastContext(),"",data.toString());
// Process result data
}
}
}
if (location!=null) {
GeoCoordinate hlocation = new GeoCoordinate(
location.getLatitude(),
location.getLongitude()
);
ResultListener<Address> listener = new ReverseGeocodeListener();
// EXCEPTION HAPPENS HERE
ReverseGeocodeRequest request = new ReverseGeocodeRequest(hlocation);
if (request.execute(listener) != ErrorCode.NONE) {
// Handle request error
}
}
} catch (Exception ex) {
Alert.OkDialog(this,"",ex.getMessage());
}
}
错误堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.naestrada.project, PID: 1148
java.lang.ExceptionInInitializerError
at com.here.android.mpa.internal.cl.<init>(PlacesBaseRequest.java:60)
at com.here.android.mpa.internal.ds.<init>(PlacesReverseGeocodeRequest.java:56)
at com.here.android.mpa.search.ReverseGeocodeRequest.<init>(ReverseGeocodeRequest.java:38)
at com.naestrada.project.activity.OperacaoActivity.onTirarFotoPressed(OperacaoActivity.java:215)
一切似乎都很好,应用程序构建,但是当我单击按钮执行请求时,我将此错误深入到 SDK 的一个类中。
解决方案
忘记初始化 MAP。如果您不使用地图,只想在 onCreate 方法中使用 API 初始化 MapEngine 的其他资源:
MapEngine mapEngine = MapEngine.getInstance();
ApplicationContext appContext = new ApplicationContext(context);
mapEngine.init(appContext, new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(Error error) {
if (error == OnEngineInitListener.Error.NONE) {
// Post initialization code goes here
} else {
// handle factory initialization failure
}
}
});
推荐阅读
- java - .replace 没有更新变量值,导致错误写入输出文件
- foreach - SwiftUI:如何使用 ForEach 选择多个项目(图像)?
- mpi - 为什么这段代码只能在有限数量的处理器上运行?
- sql - 如何使用循环oracle删除行?
- javascript - 在 React.useMemo 中的依赖数组中放入什么
- angular - Angular HTTP拦截器执行内部http请求两次
- c++ - C++ If-Else 语句打印多个语句
- python - 为什么当我将我的 python 代码转换为可执行文件 (.exe) 时 cv2.resize() 不工作
- routes - Blazor 在相同的组件中更改 URL,但保存滚动位置而不闪烁
- html - 如何在没有电脑的情况下在 iPhone 上编写 iOS 应用程序