2016-03-30 7 views
0

に私はAPI 22でGoogleマップを除くすべての作品を新しい携帯電話を得たときに今、API 19上で動作します私のデバイス上で数ヶ月に開発Androidアプリケーションを持っていません。このAPIのGoogleマップに特別なものがありますか、何か間違っていますか?アプリケーションでは、私はマップの活動のためにAndroidのマップは、API 19上で動作しますが、API 22

minSdkVersion 15 
targetSdkVersion 23 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.google.android.gms:play-services:7.8.0' 
    //tried this but still wont work  
    //compile 'com.google.android.gms:play-services:8.4.0'  
} 

コードを持っている設定であると私はエラーが電話

のjavaの

public class MapLocation extends FragmentActivity { 

private GoogleMap mMap; // Might be null if Google Play services APK is not available. 
public Double lat; 
public Double log; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map_location); 
    setUpMapIfNeeded(); 

    Intent i = getIntent(); 
    lat = Double.parseDouble(i.getStringExtra("lat")); 
    log = Double.parseDouble(i.getStringExtra("log")); 
    centerMapOnMyLocation(); 
} 

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

private void setUpMapIfNeeded() { 

    if (mMap == null) { 

     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
       .getMap();    
     if (mMap != null) { 
      setUpMap(); 
     } 
    } 
} 

private void setUpMap() { 
    mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);   
} 
private void centerMapOnMyLocation() { 

    //HERE is ERROR when checking log of phone 
    //HERE is ERROR when checking log of phone 
    //HERE is ERROR when checking log of phone 
    //HERE is ERROR when checking log of phone 


    mMap.setMyLocationEnabled(true); 

    if (!(lat == 0.0 || log == 0.0)) { 

     CameraUpdate zoom=CameraUpdateFactory.zoomTo(18); 

     CameraUpdate myLocation= CameraUpdateFactory.newLatLng(new LatLng(lat,log)); 

     mMap.moveCamera(myLocation); 
     mMap.animateCamera(zoom); 
     mMap.addMarker(new MarkerOptions().position(new LatLng(lat, log)).title("Title")); 
     Toast.makeText(this, "Map positioned", Toast.LENGTH_LONG).show(); 
    } 
    else 
    { 
     Toast.makeText(this, "no location", Toast.LENGTH_LONG).show(); 
    } 

} 

}

ログをたまたまコメント//を持っています。 lang.RuntimeException:活性ComponentInfoを開始できません{com.smth/com.smth.MapLocation}:java.lang.NullPointerExceptionが:バーチャを起動しようとしlメソッドヌルオブジェクト参照で 'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)'とandroid.app.ActivityThreadにandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) の があります。 $$(ActivityThread.java:151) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) at android.os.Handler .dispatchMessage(Handler.java:102) とandroid.os.Looper.loop(Looper.java:135) とandroid.app.ActivityThread.main(ActivityThread.java:5255) at java.lang.reflect.Method .invoke(ネイティブメソッド) java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905)com.android.internal.osで で で。 ZygoteInit.main(ZygoteInit.java:700) 原因:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)'を呼び出そうとしました com.smth.MapLocation.centerMapOnMyLocation(MapLocation.java:83) com.vodovod.ivan.watercounter.MapLocation.onCreate(MapLocation.java:30) at android.app.Activity.performCreate(Activity.java:6036) android.app.Instrumentation.callActivityOnCreateで) (Instrumentation.java:1 android.app.ActivityThread.access $ 800からandroid.app.ActivityThread.handleLaunchActivityでandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) (ActivityThread.java:2387) (ActivityThread.java:151における106) android.os.Looper.loop(Looper.java:135でandroid.os.Handler.dispatchMessageでandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) (Handler.java:102) で) ) at android.app.ActivityThread.main(ActivityThread.java:5255) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit.mainでcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905) (ZygoteInitで。Javaの:マップオブジェクトがまだ初期化されていないため@Fustigadorで述べたように700)

マップ

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:keepScreenOn="true"> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:id="@+id/map" 
tools:context="com.vodovod.ivan.watercounter.MapLocation" 
android:name="com.google.android.gms.maps.SupportMapFragment" 
android:keepScreenOn="true" /> 
</LinearLayout> 
+2

マップがすぐに使用できるわけではありません。そのため、nullオブジェクトを呼び出していると言われています。 onMapReadyメソッドをオーバーライドし、そのメソッドでsetMyLocationEnabledを呼び出します。 – Fustigador

+0

私はそのメソッドをオーバーライドできません。何故ですか? – KuKeC

+0

申し訳ありませんが、あなたはOnMapReadyCallbackインターフェイスを実装する必要があります – Fustigador

答えて

1

マップは、あなたが使用するinmediatelyを利用できないとgetMap()を置き換え、それはです。 OnMapReadyCallbackインターフェイスを実装し、そのインターフェイスからonMapReadyメソッドをオーバーライドし、そのメソッド内のGoogle Mapインスタンスに関連するメソッドを呼び出します。

0

のレイアウトは、あなたがNullPointerExceptionが取得します。それはあなたがnullオブジェクト上で呼び出していると言う理由あなたの問題を解決するために、

getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap map) { 
       centerMapOnMyLocation(map); 
      } 
     }); 
+2

私が言ったこととまったく同じです。 – Fustigador

関連する問題