2015-11-02 73 views
2

我在tabp片段中使用了viewpager中的地圖,但是Map在我的應用中顯示了空指針異常。Android谷歌地圖不能在一個片段中工作

我添加權限<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 和API密鑰正確

<meta-data 
      android:name="com.google.android.geo.API_KEY" 
      android:value="@string/google_maps_key" /> 

我的代碼是:

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class HomeTabFragment2 extends Fragment implements OnMapReadyCallback { 

    private GoogleMap mMap; 

    public HomeTabFragment2() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v=inflater.inflate(R.layout.home_tab_fragment_1, container, false); 



     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    return v; 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Add a marker in Sydney and move the camera 
     LatLng sydney = new LatLng(9.2700, 76.7800); 
     mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Pathanamthitta")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    } 

} 

我的logcat:

1-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime: FATAL EXCEPTION: main 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime: Process: com.example.rubin, PID: 5673 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at com.example.rubin.HomeTabFragment2.onCreateView(HomeTabFragment2.java:34) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.view.ViewPager.populate(ViewPager.java:1106) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.view.ViewPager.populate(ViewPager.java:952) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:610) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:677) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.View.measure(View.java:17547) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime:  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
11-01 23:58:24.139 5673-5673/com.example.rubin E/AndroidRuntime: at android.view.Choreogra 

它工作得很好當我改變片段對碎片活動。 但我無法想象它將如何在碎片中工作。請幫幫我。

+1

看到這些答案,它們類似於你的問題: http://stackoverflow.com/questions/26597161/findfragmentbyid-for -supportmapfragment-returns-null-in-android-studio http://stackoverflow.com/questions/25653898/google-maps-fragment-returning-null-inside-a-fragment – Umair

+1

你確定'R.layout.home_tab_fragment_1 '這個佈局是爲了喲你的類HomeTabFragment2'? –

+0

是的。我確定。當我將片段更改爲FragmentActivity時,它沒有任何問題。 –

回答

4

你的logcat拋出

AndroidRuntime:顯示java.lang.NullPointerException:試圖調用 虛擬方法'void com.go ogle.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)」 對空對象引用

您可以getSupportFragmentManagergetChildFragmentManager

SupportMapFragment m = ((SupportMapFragment) 
     .getSupportFragmentManager().findFragmentById(R.id.map)); 
嘗試

或者(對於完美的解決方案)

SupportMapFragment m = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)); 

公衆最終FragmentManager getChildFragmentManager()

在API級別17返回私人FragmentManager用於放置和管理 片段此片段內。

有關詳細信息,您可以檢查

findFragmentById for SupportMapFragment returns null in Android Studio

+1

非常感謝。 getChildFragmentManager()爲我工作。 –

+1

@RubinNellikunnathu很高興聽到。 –

1

嘗試通過改變以下行:

SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager() 
      .findFragmentById(R.id.map); 

TO:

SupportMapFragment mapFragment = (SupportMapFragment)v.getFragmentManager() 
      .findFragmentById(R.id.map); 
+0

不工作,無法解析方法getFragmentManager() –

+0

嘗試使用getSupportFragmentManager(); –