3

I followed the Android tutorial for Skobbler which can be found here:

http://developer.skobbler.com/getting-started/android

In my app, I cannot use the SKMapFragment because I need a android.support.v4.app.Fragment for the rest of my apps logic. This is why I went for the SKMapViewHolder method.

My fragment code looks like this:

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.skobbler.ngx.map.SKAnnotation;
import com.skobbler.ngx.map.SKCoordinateRegion;
import com.skobbler.ngx.map.SKMapCustomPOI;
import com.skobbler.ngx.map.SKMapPOI;
import com.skobbler.ngx.map.SKMapSurfaceListener;
import com.skobbler.ngx.map.SKMapSurfaceView;
import com.skobbler.ngx.map.SKMapViewHolder;
import com.skobbler.ngx.map.SKPOICluster;
import com.skobbler.ngx.map.SKScreenPoint;

import nl.afdelingapps.android.boschxp.R;
import nl.afdelingapps.android.boschxp.view.BaseFragment;
import nl.afdelingapps.android.boschxp.helper.SkobblerHelper;

/**
 * Created by bartburg on 27-10-2015.
 */
public class RouteMapFragment extends BaseFragment implements SKMapSurfaceListener {

    private SKMapViewHolder mapViewGroup;
    private SKMapSurfaceView mapView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View inflatedView = inflater.inflate(R.layout.fragment_skobbler, container, false);
        mapViewGroup = (SKMapViewHolder) inflatedView.findViewById(R.id.map_surface_holder);
        mapViewGroup.setMapSurfaceListener(this);
        return inflatedView;
    }

    @Override
    public boolean getForceRefresh() {
        return false;
    }

    @Override
    public String getFragmentName() {
        return "CenterMapFragment";
    }

    @Override
    public void onPause() {
        super.onPause();
        if (mapView != null) {
            mapView.onPause();
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mapView != null) {
            mapView.onResume();
        }
    }

    @Override
    public void onActionPan() {

    }

    @Override
    public void onActionZoom() {

    }

    @Override
    public void onSurfaceCreated(SKMapViewHolder skMapViewHolder) {
        mapView = mapViewGroup.getMapSurfaceView();
        mapView.applySettingsFromFile(SkobblerHelper.getMapCreatorFilePath(getContext()));
    }

    @Override
    public void onMapRegionChanged(SKCoordinateRegion skCoordinateRegion) {

    }

    @Override
    public void onMapRegionChangeStarted(SKCoordinateRegion skCoordinateRegion) {

    }

    @Override
    public void onMapRegionChangeEnded(SKCoordinateRegion skCoordinateRegion) {

    }

    @Override
    public void onDoubleTap(SKScreenPoint skScreenPoint) {

    }

    @Override
    public void onSingleTap(SKScreenPoint skScreenPoint) {

    }

    @Override
    public void onRotateMap() {

    }

    @Override
    public void onLongPress(SKScreenPoint skScreenPoint) {

    }

    @Override
    public void onInternetConnectionNeeded() {

    }

    @Override
    public void onMapActionDown(SKScreenPoint skScreenPoint) {

    }

    @Override
    public void onMapActionUp(SKScreenPoint skScreenPoint) {

    }

    @Override
    public void onPOIClusterSelected(SKPOICluster skpoiCluster) {

    }

    @Override
    public void onMapPOISelected(SKMapPOI skMapPOI) {

    }

    @Override
    public void onAnnotationSelected(SKAnnotation skAnnotation) {

    }

    @Override
    public void onCustomPOISelected(SKMapCustomPOI skMapCustomPOI) {

    }

    @Override
    public void onCompassSelected() {

    }

    @Override
    public void onCurrentPositionSelected() {

    }

    @Override
    public void onObjectSelected(int i) {

    }

    @Override
    public void onInternationalisationCalled(int i) {

    }

    @Override
    public void onBoundingBoxImageRendered(int i) {

    }

    @Override
    public void onGLInitializationError(String s) {

    }

    @Override
    public void onScreenshotReady(Bitmap bitmap) {

    }
}

So really nothing fancy. BaseFragmentis just an abstract class with nothing fancy. Actually just some Google Analytics stuff and logging stuff, nothing more and it's not used for this fragment yet.

My fragment xml is just like in the tutorial:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:mapbox="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize">
    <com.skobbler.ngx.map.SKMapViewHolder
        android:id="@+id/map_surface_holder"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</RelativeLayout>

I followed every step and the map stays black. I tested this on Android 4.3, 5.1 and 6.0. It's black on all screens.

My gradle file:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "nl.afdelingapps.android.boschxp"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 11
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
        transitive = true;
    }
    compile('com.mapbox.mapboxsdk:mapbox-android-sdk:2.2.0@aar') {
        transitive = true
    }
    compile 'com.qozix:tileview:2.0.8'
    compile 'com.google.code.gson:gson:2.4'
    compile 'com.google.android.gms:play-services-panorama:8.3.0'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
    compile 'uk.co.chrisjenx:calligraphy:2.1.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'com.github.ksoichiro:android-observablescrollview:1.6.0'
    compile 'com.google.android.gms:play-services-analytics:8.3.0'
    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'de.greenrobot:java-common:2.2.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.estimote:sdk:0.9.4@aar'
    compile project(':widgetsystem')
}

repositories {
    maven {
        url "http://developer.skobbler.com/maven/"
    }
}

configurations {
    skobblersdk
}
dependencies {
    skobblersdk "com.skobbler.ngx:SKMaps:2.5.1"
    compile files('libs/SKMaps.jar')
}

def assetsPath = "$projectDir/src/main/assets"
def libsPath = "$projectDir/libs"
def jniLibsPath = "$projectDir/src/main/jniLibs"

dependencies {
    compile 'com.android.support:support-v4:23.+'
}
dependencies {
    compile 'com.android.support:support-v4:23.+'
}
task installSKMaps << {
    copy {
        from configurations.skobblersdk
        into "$buildDir/skobblersdk-down"
        rename { String fileName -> 'skobblersdkres.zip' }
    }
    copy {
        from zipTree("$buildDir/skobblersdk-down/skobblersdkres.zip")
        into "$buildDir/skobblersdk-down"
    }
    delete("$jniLibsPath",
            "$assetsPath/SKMaps.zip",
            "$libsPath/SKMaps.jar")
    copy {
        from "${buildDir}/skobblersdk-down/jniLibs"
        into "$jniLibsPath"
    }
    copy {
        from "${buildDir}/skobblersdk-down/SKMaps.zip"
        into "$assetsPath"
    }
    copy {
        from "${buildDir}/skobblersdk-down/SKMaps.jar"
        into "$libsPath"
    }
    delete("$buildDir/skobblersdk-down")
    delete(configurations.skobblersdk)
}

And a screenshot:

screenshot black skobbler map

My logs shows at least something goes wrong in background:

02-12 11:15:18.207 16085-16085/nl.afdelingapps.android.boschxp W/System.err: java.lang.NoSuchMethodError: no non-static method "Lcom/skobbler/ngx/positioner/SKPosition;.getLatitude()D"
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.Runtime.nativeLoad(Native Method)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.Runtime.doLoad(Runtime.java:435)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.Runtime.loadLibrary(Runtime.java:370)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.System.loadLibrary(System.java:1076)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.skobbler.ngx.SKMaps.<clinit>(SourceFile:59)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at nl.afdelingapps.android.boschxp.view.activity.MainActivity.onMapTexturesPrepared(MainActivity.java:349)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.skobbler.ngx.SKPrepareMapTextureThread$1.run(SourceFile:92)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.os.Looper.loop(Looper.java:148)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp D/SkobblerNG: gJVM registerMethod error for ClassSKPosition :: getLatitude ()D
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: java.lang.NoSuchMethodError: no non-static method "Lcom/skobbler/ngx/positioner/SKPosition;.getLongitude()D"
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.Runtime.nativeLoad(Native Method)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.Runtime.doLoad(Runtime.java:435)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.Runtime.loadLibrary(Runtime.java:370)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.System.loadLibrary(System.java:1076)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.skobbler.ngx.SKMaps.<clinit>(SourceFile:59)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at nl.afdelingapps.android.boschxp.view.activity.MainActivity.onMapTexturesPrepared(MainActivity.java:349)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.skobbler.ngx.SKPrepareMapTextureThread$1.run(SourceFile:92)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.os.Looper.loop(Looper.java:148)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5417)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Bart Burg
  • 4,786
  • 7
  • 52
  • 87
  • For fixing the errors update the build with: http://forum.skobbler.com/showthread.php/7257-SIGSEGV-error-in-calculateRouteWithPoints%28%29 – SylviA Feb 22 '16 at 09:15

0 Answers0