Java SupportMapFragment和NullPointerException

Java SupportMapFragment和NullPointerException,java,android,google-maps-android-api-2,Java,Android,Google Maps Android Api 2,我正在尝试使用SupportMapFragment,出现以下错误: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.c.c.o()' on a null object reference at com.google.maps.api.android.lib6.c.z.b(Unknown Source) 错误出现在此处

我正在尝试使用SupportMapFragment,出现以下错误:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.c.c.o()' on a null object reference
        at com.google.maps.api.android.lib6.c.z.b(Unknown Source)
错误出现在此处的某个位置:

    @Override
public void onViewCreated(View view, Bundle savedInstanceState) {

    SupportMapFragment supportMapFragment;

    if (Build.VERSION.SDK_INT < 21) {
        supportMapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
    } else {
        supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
    }

    supportMapFragment.getMapAsync(this);

    super.onViewCreated(view, savedInstanceState);
}
我不知道空引用在哪里

onCreate函数:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
   // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_maps, container, false);
}
堆栈轨迹:

03-22 22:38:07.291    3758-3758/itcc.li.lieventuregradle E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: itcc.li.lieventuregradle, PID: 3758
java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.c.c.o()' on a null object reference
        at com.google.maps.api.android.lib6.c.z.b(Unknown Source)
        at com.google.android.gms.maps.internal.x.onTransact(SourceFile:115)
        at android.os.Binder.transact(Binder.java:380)
        at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onResume(Unknown Source)
        at com.google.android.gms.maps.SupportMapFragment$a.onResume(Unknown Source)
        at com.google.android.gms.dynamic.a$7.b(Unknown Source)
        at com.google.android.gms.dynamic.a.a(Unknown Source)
        at com.google.android.gms.dynamic.a.onResume(Unknown Source)
        at com.google.android.gms.maps.SupportMapFragment.onResume(Unknown Source)
        at android.support.v4.app.Fragment.performResume(Fragment.java:1829)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:993)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        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:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
fragment_maps.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

问题1)

如果代码中确实有以下行(哪一行是正确的)

然后删除
onCreateView
方法

您正在尝试将地图片段膨胀为地图片段

问题2)

摆脱这个讨厌的东西

if (Build.VERSION.SDK_INT < 21) {
    supportMapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
} else {
    supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
}
if(Build.VERSION.SDK\u INT<21){
supportMapFragment=(supportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
}否则{
supportMapFragment=(supportMapFragment)getChildFragmentManager().findFragmentById(R.id.map);
}
您可以通过调用
getFragmentManager()
getChildFragmentManager()
从片段访问片段管理器,具体取决于您需要什么。这两个都是支持片段管理器的实例,因为您正在支持片段中工作

另外,你不必找到地图片段,你就是它

问题3)


尊重生命周期逻辑。在重写方法的开头调用
super.onViewCreated(…)
,在重写方法的结尾调用
super.onDestroyView()
(如果您要使用它)。以同样的方式,您希望片段的祖先先初始化,最后清理。

请禁用proguard,并提供正常堆栈跟踪和正确的行,您在哪里有NPE。但几乎可以肯定的是,它只是找不到id的片段。请提供您的onCreateView方法实现以及xml文件,在有问题的文本中,请使用正常格式。对不起,这是本论坛的新内容。supportMapFragment列表不为空:supportMapFragment{1399afb5#0 id=0x7f0b0063}fragment_maps.xml。代码也在此处:在分支“gradle”上没有问题!很高兴我能成为你的朋友service@Eugen你说得对。如果扩展SupportMapFragment,则无需调用onCreateView()。现在,我该怎么玩呢?如放大、缩小等@akshayrajkore通过
void getmapsync(OnMapReadyCallback)
获取
GoogleMap
实例。然后
public class MapsFragment extends SupportMapFragment ...
if (Build.VERSION.SDK_INT < 21) {
    supportMapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
} else {
    supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
}