2016-08-14 10 views
2

Android用SKマップSDKを使用しようとしていますが、いくつかの問題に直面しています。私はこのウェブサイトのガイドに従っている:http://developer.skobbler.com/getting-started/android AndroidのSDKを統合しても、私は間違いを犯しているようだ。問題は次のとおりです。アプリケーションを起動するとすぐに最初のアクティビティが正しく開始されますが、SKマップライブラリが初期化され、マップアクティビティが作成されるとすぐに、アプリはエラーを表示せずにクラッシュします。AndroidスタジオでSKマップを使用できません

public class Map_initialization extends AppCompatActivity implements SKMapsInitializationListener { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout); 
    SKMaps.getInstance().initializeSKMaps(getApplication(),this); 
} 

@Override 
public void onLibraryInitialized(boolean b) { ///once maps initialized then go to map activity 
    Intent intent=new Intent(this,MainActivity.class); 
    startActivity(intent); 
} 
} 

はここに私の地図のアクティビティコードである:ここでマップが作成され は、ここに私の初期化コードです。ここで

public class MainActivity extends AppCompatActivity implements SKMapSurfaceListener { 

double lat; 
double lng; 
float zoom_level=0; 
String Location="19.875692,75.353020"; 
// get the annotation object 
SKAnnotation new_loc = new SKAnnotation(10); //marker which can be visible on map 


/** 
* Surface view for displaying the map 
*/ 
private SKMapSurfaceView mapView; 

/** 
* the view that holds the map view 
*/ 
SKMapViewHolder mapHolder; 

// get the callout view object from the map holder 
SKCalloutView mapPopup = mapHolder.getCalloutView(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mapHolder = (SKMapViewHolder) findViewById(R.id.map_surface_holder); 
} 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    SKMaps.getInstance().destroySKMaps(); 
} 

public void Show_Location() 
{ 

    lat=Double.valueOf(Location.substring(0,9));//extracting latitude 
    lng=Double.valueOf(Location.substring(10,Location.length()));//extracting longitude 
    zoom_level=16; 
    new_loc.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_BLUE); 
    new_loc.setLocation(new SKCoordinate(lat,lng)); 
    mapView.animateToZoomLevel(zoom_level); 
    mapView.animateToLocation(new SKCoordinate(lat,lng),1000); 
    mapView.addAnnotation(new_loc, SKAnimationSettings.ANIMATION_PIN_DROP);//adding marker 

    // set the callout view’s background color 
    mapPopup.setViewColor(Color.argb(255, 200, 200, 255)); 
    mapPopup.showAtLocation(new SKCoordinate(lat,lng),true); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    mapHolder.onPause(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mapHolder.onResume(); 
} 

@Override 
public void onActionPan() { 
    zoom_level--; 
    mapView.setZoom(zoom_level); 
} 

@Override 
public void onActionZoom() { 
    zoom_level++; 
    mapView.setZoom(zoom_level); 
} 

@Override 
public void onSurfaceCreated(SKMapViewHolder skMapViewHolder) { //on map surface created 
    mapView = mapHolder.getMapSurfaceView(); 
    mapView.getMapSettings().setMapPoiIconsShown(true); 
    mapView.getMapSettings().setMapPanningEnabled(true); 
    mapView.getMapSettings().setMapZoomingEnabled(true); 
} 

@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) { 
    Toast.makeText(getApplicationContext(),"ERROR:"+s,Toast.LENGTH_LONG).show(); 

} 

@Override 
public void onScreenshotReady(Bitmap bitmap) { 

} 
} 

アプリのための私のGradleです:

buildscript { 
repositories { 
    mavenCentral() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:2.1.2' 
} 
} 
//apply plugin: 'java' 
repositories { 
maven { 
    url "http://developer.skobbler.com/maven/" 
} 
} 

configurations { 
skobblersdk 
} 
apply plugin: 'com.android.application' 
android { 

compileSdkVersion 23 
buildToolsVersion "24.0.0" 
defaultConfig { 
    applicationId "com.example.ahirrao.gps" 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'),  
    'proguard-rules.pro' 
     signingConfig signingConfigs.config 
    } 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.4.0' 
skobblersdk "com.skobbler.ngx:SKMaps:3.0.0" 
compile files('libs/SKMaps.jar') 
} 

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

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/" 
    into "$assetsPath" 
} 
copy { 
    from "${buildDir}/skobblersdk-down/SKMaps.jar" 
    into "$libsPath" 
} 
delete("$buildDir/skobblersdk-down") 
delete(configurations.skobblersdk) 
} 

これは、マップのための私のレイアウトです:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.skobbler.ngx.map.SKMapViewHolder 
    android:id="@+id/map_surface_holder" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 



</RelativeLayout> 

そしてSkobblerの上記ウェブサイト上で、彼らが使用してコードを与えています私はそれをアンドロイドプラグインと互換性がないので、私はそれを使用することはできません。

E/AndroidRuntime: FATAL EXCEPTION: main 

Process: com.example.ahirrao.gps, PID: 541 

java.lang.RuntimeException: Unable to instantiate activity 
ComponentInfo{com.example.ahirrao.gps/com.example.ahirrao.gps.MainActivity}: 
java.lang.NullPointerException at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2264) 
at  
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
at android.os.Handler.dispatchMessage(Handler.java:110) 
at android.os.Looper.loop(Looper.java:193) 
at android.app.ActivityThread.main(ActivityThread.java:5299) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at com.example.ahirrao.gps.MainActivity.<init>(MainActivity.java:53) 
at java.lang.Class.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1215) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)  
at android.app.ActivityThread.access$800(ActivityThread.java:151)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)  
at android.os.Handler.dispatchMessage(Handler.java:110)  
at android.os.Looper.loop(Looper.java:193)  
at android.app.ActivityThread.main(ActivityThread.java:5299)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:515)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)  
at dalvik.system.NativeStart.main(Native Method)  
+0

まだ回答がありません。多分@Andoは素敵な答えを与えるでしょう、彼はskmapsに関して多くのことを助けました。 –

+0

skobblerのウェブサイトには、Android Studioのデモプロジェクトがあります。本当にエラーログはありませんか?たとえば、APIキーはどこに設定しますか? – Ando

+0

@Andoこんにちは、私は正常にそれを実行しているデモプロジェクトを持っている。そして、私はMETADATAタグを使ってマニフェストのAPIキーを設定しています。そして、gradleファイルはどうですか?これはウェブサイトではJavaプラグインを使用すると言われていますが、私はそれを使うことができず、正しくインストールされています。どうすればjavaプラグインを使用できますか?エラーに関して、私はlogcatを投稿します。 –

答えて

2

エラーが発生しました。私は間違いをしていた。多分それは誰かを助けるでしょう。マップサーフェスが作成される前に、私はすべての視覚的要素を呼んでいた

、これはNULLポインタ例外のようなエラーが発生し、app.Soに手順を換金するかどうか、マップビューのためにnullをmapViewをテストしたりonSurfaceCreated方法およびテストにブール値を設定することですまた、onCreateではMapSurfaceリスナーをonSurfaceCreatedと呼ぶように設定しなければならないため、注釈が描画されないなどのエラーが発生しました。

関連する問題