4

我嘗試使用新的谷歌遊戲服務庫和embbed地圖在一側的地圖片段如下的Android SupportMapFragment異常錯誤

PlaceMapsFragment.java

public class PlaceMapsFragment extends SupportMapFragment { 
    private GoogleMap mMap; 
    private LatLng mPosFija; 

    public PlaceMapsFragment() { 
     super(); 
    } 

    public static PlaceMapsFragment newInstance(LatLng posicion) { 
     PlaceMapsFragment frag = new PlaceMapsFragment(); 
     frag.mPosFija = posicion; 
     return frag; 
    } 

    @Override 
    public GoogleMap getMap() { 
     // TODO Auto-generated method stub 
     return super.getMap(); 
    } 

    @Override 
    public void onCreate(Bundle arg0) { 
     // TODO Auto-generated method stub 
     super.onCreate(arg0); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = super.onCreateView(inflater, container, savedInstanceState); 
     //initMap(); 
     return view; 
    } 

    private void initMap() { 
     UiSettings settings = getMap().getUiSettings(); 
     settings.setAllGesturesEnabled(false); 
     settings.setMyLocationButtonEnabled(false); 

     getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(mPosFija, 16)); 
     getMap().addMarker(
       new MarkerOptions().position(mPosFija) 
         .icon(BitmapDescriptorFactory 
           .fromResource(R.drawable.marker))); 
    } 

} 

錯誤

12-10 01:44:54.416: E/AndroidRuntime(32716): FATAL EXCEPTION: main 
12-10 01:44:54.416: E/AndroidRuntime(32716): java.lang.NullPointerException 
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.ar.b.a(Unknown Source) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.y.h.a(Unknown Source) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.y.au.a(Unknown Source) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at maps.y.ae.moveCamera(Unknown Source) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.google.android.gms.maps.internal.IGoogleMapDelegate$Stub.onTransact(IGoogleMapDelegate.java:83) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Binder.transact(Binder.java:297) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.m7.nomad.PlaceMapsFragment.initMap(PlaceMapsFragment.java:55) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.m7.nomad.PlaceMapsFragment.onCreateView(PlaceMapsFragment.java:46) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.m7.nomad.PlaceActivity$TabManager.onTabChanged(PlaceActivity.java:153) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:379) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabHost.setCurrentTab(TabHost.java:364) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.view.View.performClick(View.java:3591) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.view.View$PerformClick.run(View.java:14263) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Handler.handleCallback(Handler.java:605) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.os.Looper.loop(Looper.java:137) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at android.app.ActivityThread.main(ActivityThread.java:4507) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at java.lang.reflect.Method.invokeNative(Native Method) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at java.lang.reflect.Method.invoke(Method.java:511) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
12-10 01:44:54.416: E/AndroidRuntime(32716): at dalvik.system.NativeStart.main(Native Method) 

enter image description here

清單文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.m7.nomad" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="16" /> 

    <permission 
     android:name="com.example.newmapview.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.Sherlock" > 
     <activity 
      android:name="com.m7.nomad.SplashActivity" 
      android:label="@string/app_name" > 
     </activity> 
     <activity 
      android:name="com.m7.nomad.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.m7.nomad.PlaceActivity" 
      android:label="@string/app_name" > 
     </activity> 

     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="XXXXXXXXXXX" /> 
    </application> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 

</manifest> 

我有具有TabHost其中附加了兩個片段一個SherlockFragmentActivity。我想呈現地圖內的標籤片段之一

編輯

我有要顯示的地圖,但現在我不能夠參照地圖和更改地圖混合。基本上我需要引用地圖與出錯空。

+0

看到這個http://stackoverflow.com/questions/13719263/unable-instantiate-android-gms-maps-mapfragment/13743290#13743290。簡而言之,您需要添加模塊作爲整個文件夾google-play-services_lib,而不僅僅是google-play-services.jar。 – jumper0k

+0

@ jumper0k我已經添加了 –

+0

現在已經在你的xml中使用MapView,並且在setUpMapIfNeeded中的代碼中,你試圖通過id找到一個片段。你應該通過id找到一個視圖。對於MapView,請參閱示例「Raw MapView」 – jumper0k

回答

4

onCreateView()必須調用它的父。檢查我的解決方案在https://stackoverflow.com/a/13734470/835787附近。該映射在MapFragment的onCreateView()方法中初始化,如果您不調用它,映射將爲空。

+0

我認爲我錯過了一些東西。當我選擇地圖選項卡時,我正在加載PlaceMapsFragment。所以我不確定哪個家長我也應該參考。你能指出你指的是哪一行嗎? –

+0

我已經在問題中更新了我的代碼。請指導,如果我在正確的軌道 –

+0

Sloy:我得到了地圖工作。但是現在我需要引用Map視圖併爲Map添​​加功能。我如何在SupportMapFragment中設置Ceter或更改MAp類型。我已經使用了與您仍然面臨空指針異常相同的代碼。 –

2

我不知道的是它可以幫助或沒有,但你應該設置你的這裏:

<permission 
    android:name="com.example.newmapview.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" /> 
+0

該死的。那對我來說很愚蠢。但我仍然得到一個空指針異常。大部分我想要的是如何繪製如何通過代碼將地圖填充到佈局中 –

+0

要將地圖填充到佈局中,請嘗試使用MapView。 – jumper0k

+0

你的意思是這樣的?我仍然需要在這裏添加API密鑰?

3
  1. super.onCreate(savedInstanceState);應的onCreate()被調用,而不是onCreateView()
  2. 如果你想覆蓋onCreateView(),它應該是這樣的:

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        View v = super.onCreateView(inflater, container, savedInstanceState); 
    
        // Do any other initialization you need, but note that the MapView already exists inside v 
    
        setUpMapIfNeeded(v); 
        return v; 
    } 
    
+0

我如何設置視圖在相同? –

+0

當我沒有提到佈局或初始化MapView我如何得到它的參考 –

+0

SupportMapFragment已經設置了自己的視圖。如果您想添加自己的視圖,您可以保留對super.onCreateView()的返回值的引用。 您不需要對MapView的引用。就是GoogleMap,你可以通過調用片段上的getMap()來獲得它。 –