I'm creating an android app, and I just want to load a map from my arcGIS online.
Here's the MainActivity class:
public class MainActivity extends AppCompatActivity {
private MapView mMapView;
private ArcGISMap wenceMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get a reference to the MapView in your layout file
mMapView = findViewById(R.id.mapView);
wenceMap = new ArcGISMap(Basemap.Type.OPEN_STREET_MAP,0.47867,37.803972, 7 );
mMapView.setMap(wenceMap);
}
@Override
protected void onPause()
{
mMapView.pause();
super.onPause();
}
@Override
protected void onResume()
{
super.onResume();
mMapView.resume();
}
@Override
protected void onDestroy()
{
super.onDestroy();
mMapView.dispose();
}
}
When I start the app, the MainActivity runs, the map starts to load, then it crashes:
2023-03-06 16:28:43.751 5916-5950/com.example.connectdb A/ample.connectd: runtime.cc:663] JNI DETECTED ERROR IN APPLICATION: JNI NewLocalRef called with pending exception java.lang.NoClassDefFoundError: com.esri.arcgisruntime.internal.io.handler.request.r
runtime.cc:663] at void com.esri.arcgisruntime.internal.requestable.a$b.a(boolean) (SourceFile:42)
runtime.cc:663] at void com.esri.arcgisruntime.internal.requestable.a.a(com.esri.arcgisruntime.internal.jni.CoreRequest, com.esri.arcgisruntime.io.RemoteResource) (SourceFile:6)
runtime.cc:663] at void com.esri.arcgisruntime.layers.ServiceImageTiledLayer.onRequestRequired(com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:1)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer.a(com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:5)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer.$r8$lambda$PYL96yarVXNzWqZ_E_istxaJo94(com.esri.arcgisruntime.layers.Layer, com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:-1)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer$$ExternalSyntheticLambda0.a(com.esri.arcgisruntime.internal.jni.CoreRequest) (D8$$SyntheticClass:-1)
runtime.cc:663] at void com.esri.arcgisruntime.internal.jni.CoreLayer.onRequestRequired(long) (SourceFile:5)
runtime.cc:663] Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/hc/core5/http/message/BasicNameValuePair;
runtime.cc:663] at void com.esri.arcgisruntime.internal.io.handler.request.c.<clinit>() (SourceFile:1)
runtime.cc:663] at void com.esri.arcgisruntime.internal.requestable.a$b.a(boolean) (SourceFile:42)
runtime.cc:663] at void com.esri.arcgisruntime.internal.requestable.a.a(com.esri.arcgisruntime.internal.jni.CoreRequest, com.esri.arcgisruntime.io.RemoteResource) (SourceFile:6)
runtime.cc:663] at void com.esri.arcgisruntime.layers.ServiceImageTiledLayer.onRequestRequired(com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:1)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer.a(com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:5)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer.$r8$lambda$PYL96yarVXNzWqZ_E_istxaJo94(com.esri.arcgisruntime.layers.Layer, com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:-1)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer$$ExternalSyntheticLambda0.a(com.esri.arcgisruntime.internal.jni.CoreRequest) (D8$$SyntheticClass:-1)
runtime.cc:663] at void com.esri.arcgisruntime.internal.jni.CoreLayer.onRequestRequired(long) (SourceFile:5)
runtime.cc:663] Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.hc.core5.http.message.BasicNameValuePair" on path: DexPathList[[dex file "/data/data/com.example.connectdb/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~xFM4OE_RLEEB6OQ3KBuvcw==/com.example.connectdb-XpS3GPmm3IYAnKjd-2utlw==/base.apk"],nativeLibraryDirectories=[/data/app/~~xFM4OE_RLEEB6OQ3KBuvcw==/com.example.connectdb-XpS3GPmm3IYAnKjd-2utlw==/lib/x86, /data/app/~~xFM4OE_RLEEB6OQ3KBuvcw==/com.example.connectdb-XpS3GPmm3IYAnKjd-2utlw==/base.apk!/lib/x86, /system/lib, /system_ext/lib]]
runtime.cc:663] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:207)
runtime.cc:663] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
runtime.cc:663] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
runtime.cc:663] at void com.esri.arcgisruntime.internal.io.handler.request.c.<clinit>() (SourceFile:1)
runtime.cc:663] at void com.esri.arcgisruntime.internal.requestable.a$b.a(boolean) (SourceFile:42)
runtime.cc:663] at void com.esri.arcgisruntime.internal.requestable.a.a(com.esri.arcgisruntime.internal.jni.CoreRequest, com.esri.arcgisruntime.io.RemoteResource) (SourceFile:6)
runtime.cc:663] at void com.esri.arcgisruntime.layers.ServiceImageTiledLayer.onRequestRequired(com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:1)
2023-03-06 16:28:43.751 5916-5950/com.example.connectdb A/ample.connectd: runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer.a(com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:5)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer.$r8$lambda$PYL96yarVXNzWqZ_E_istxaJo94(com.esri.arcgisruntime.layers.Layer, com.esri.arcgisruntime.internal.jni.CoreRequest) (SourceFile:-1)
runtime.cc:663] at void com.esri.arcgisruntime.layers.Layer$$ExternalSyntheticLambda0.a(com.esri.arcgisruntime.internal.jni.CoreRequest) (D8$$SyntheticClass:-1)
runtime.cc:663] at void com.esri.arcgisruntime.internal.jni.CoreLayer.onRequestRequired(long) (SourceFile:5)
runtime.cc:663]
runtime.cc:663] in call to NewLocalRef
2023-03-06 16:28:43.751 5916-5950/com.example.connectdb A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 5950 (RTC thread), pid 5916 (ample.connectdb)
I've asked around, the answer I'm getting is:
It seems that there is a problem with the ArcGIS Runtime SDK for Android. The error message suggests that there is a missing class, specifically org.apache.hc.core5.http.message.BasicNameValuePair. The NoClassDefFoundError exception indicates that the class was present during compilation but is missing during runtime.
I downloaded the arcgis java SDK for android, implementing it in my gradle build as such:
implementation files('libs/arcgis-runtime-sdk-java-200.0.0/libs/arcgis-android-100.15.1.aar')
I've tried:
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment:2.5.3'
implementation 'androidx.navigation:navigation-ui:2.5.3'
testImplementation 'junit:junit:4.13.2'
implementation 'org.apache.httpcomponents:httpcore:4.4.14'
//implementation "com.esri.arcgisruntime:arcgis-java:100.15.1"
runtimeOnly "org.slf4j:slf4j-nop:1.7.32"
implementation files('libs/volley-1.2.1.aar')
The 'com.esri.arcgisrunetime' doesnt work, I had to downloaded it manually.