2016-03-30 151 views
0

我有Android應用程序,我在我的設備上開發了幾個月API 19的工作。現在,當我得到API 22的新手機除Google地圖以外的所有作品。這個API有谷歌地圖有什麼特別之處,或者我做錯了什麼?在應用程序設置,我有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'  
} 

碼在地圖的活動是和我有評論//其中發生錯誤的電話

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(); 
    } 

} 

}

登錄

的Java。 lang.RuntimeException:無法啓動活動ComponentInfo {com.smth/com.smth.MapLocation}:java.lang.NullPointerException:試圖調用virtua l在android.app.ActivityThread的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 上的null對象引用 上的方法'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)'。在android.app.ActivityThread.access $ handleHandlerActivity(ActivityThread.java:2387) $ 800(ActivityThread.java:151) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) at android.os.Handler .dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5255) at java.lang.reflect.Method .invoke(Native Method) 在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:試圖在空對象引用 上調用虛擬方法'void com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(boolean)' at com.smth.MapLocation.centerMapOnMyLocation(MapLocation.java:83) at com.vodovod.ivan.watercounter.MapLocation.onCreate(MapLocation.java:30) at android.app.Activity.performCreate(Activity.java:6036 ) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1 106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access $ 800(ActivityThread.java:151 )android.app.ActivityThread $ hHandleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135 ) at android.app.ActivityThread.main(ActivityThread.java:5255) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main(ZygoteInit。Java的: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

地圖暫時不可供您使用,這就是爲什麼它表示您正在調用空對象。覆蓋onMapReady方法,並在該方法中調用setMyLocationEnabled。 – Fustigador

+0

我無法重寫該方法。這是爲什麼? – KuKeC

+0

對不起,您需要實現OnMapReadyCallback接口 – Fustigador

回答

1

地圖不inmediately供您使用,這就是爲什麼它說你調用一個空的對象。實現OnMapReadyCallback接口,從該接口覆蓋onMapReady方法,並在該方法內調用涉及Google Map實例的方法。

0

正如@Fustigador提到的佈局,你會得到一個NullPointerException因爲地圖對象尚未初始化。爲了解決你的問題,更換getMap()

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

正是我所說的。 – Fustigador

相關問題