当前位置: 首页 > 知识库问答 >
问题:

在MiniControllerFragment中调用super.oncreateView()时出现NullPointerException

洪德寿
2023-03-14

所以我创建了自己的类,它扩展了minicontrollerfragment:

public class CastControllingFragment extends MiniControllerFragment
{
    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle)
    {
        View view = super.onCreateView(layoutInflater, viewGroup, bundle);
        if (view != null) {
            FrameLayout.LayoutParams frameLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            view.setLayoutParams(frameLayoutParams);
        }
        return view;
    }

    public static void show(FragmentActivity activity) {
        FragmentManager fragmentManager = activity.getSupportFragmentManager();
        if (fragmentManager.findFragmentById(R.id.castMiniController) == null)
        {
            View rootView = activity.findViewById(R.id.fragment_container);
            if (rootView instanceof ViewGroup)
            {                    
               fragmentManager.beginTransaction().add(R.id.fragment_container, new CastControllingFragment()).commit();
            }
        }
    }

}

我实例化了它,并将它添加到活动onresume回调中的片段事务中:

    @Override
    protected void onResume() {
        CastControllingFragment.show(this);
        super.onResume();
    }

这是活动的布局,FrameLayout作为我的片段的容器:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </FrameLayout>

</RelativeLayout>

java.lang.runtimeException:无法恢复活动java.lang.nullpointerException:试图从位于Android.app.activitythread.performResumeActivit(activitythread.java:3400)位于Android.app.activitythread.java:3440)位于Android.app.activitythread.handleresumeActivity(activitythread.java:3440)位于Android.app.activitythread.handlelaunchActivity(ler.DispatchMessage(handler.java:102),android.os.looper.loop(looper.java:154),android.app.activitythread.main(activitythread.java:6077),java.lang.reflect.Method.invoke(原生方法),com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:755),com.android.internal.os.zygoteinit.main

原因:java.lang.nullPointerException:试图从com.google.android.gms.cast.framework.media.widget.minicontrollerfragment.zza(未知来源)com.google.android.gms.cast.framework.media.widget.minicontrollerfragment.oncreateview(未知来源)com.google.android.gms.framework.media.widget.minicontrollerfragment.oncreateview(未知来源)在Android.support.v4.app.fragmentManager.java:1113),在Android.support.v4.app.backStackRecord.run(fragmentManager.java:1295),在Android.support.v4.app.backStackRecord.run(backStackRecord.java:801),在Android.support.v4.app.fragmentManagerimpl.execPendingActhtml" target="_blank">ions(FragmentManager.java:1682),在7.app.appcomp在Android.app.activity.performResume(activity.java:175),在Android.app.activity.performResume(activity.java:6792),在Android.app.activityThread.performResumeActivity(activityThread.java:3377),在Android.app.activityThread.handleresumeActivity(activityThread.java:3440), 在Android.app.activitythread.HandleLaunchActivity(activitythread.java:2713) 在Android.app.activitythread.-Wrap12(activitythread.java) 在Android.app.activitythread$h.handleMessage(activitythread.java:1460) 在Android.os.handler.DispatchMessage(Handler.java:102) 在Android.os.looper.loop(looper.java:154) 在Android.app.activitythread.main(activitythread.java:6077) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:865) 在com.android.internal.os.zygoteinit.main(zygoteinit.java:755)

共有1个答案

秦俊
2023-03-14

最新的Cast SDK有一个变化,使其与旧版本的Google Play服务不兼容(崩溃)。不幸的是,当使用最新的cast SDK和过时的GPS(或在模拟器上)时,即使是cast示例应用程序也会崩溃。在这里讨论了这个问题:https://github.com/googlecast/castvideo-android/issues/12

解决方案是在初始化任何强制转换组件之前检查谷歌Play服务版本,包括迷你控制器(即,您不能只是将迷你控制器片段放入xml布局文件中--您要么必须动态膨胀它,要么有两个布局文件--一个有迷你控制器,一个没有迷你控制器)。

检查GPS版本的代码:

GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(context);
isGPSAvailable = (resultCode == ConnectionResult.SUCCESS);

>

  • 创建单独的xml布局文件,并在活动中填充适当的文件。oncreate:

    setContentView(isGPSAvailable ? R.layout.activity_main_with_controller : R.layout.activity_main_without_controller);
    

    在布局中创建viewstub,指向minicontrollerfragment,并仅在有播放服务时才对其进行膨胀。

    活动布局:

    <ViewStub
    android:id="@+id/cast_minicontroller"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout="@layout/cast_mini_controller_fragment"
    />
    
    <?xml version="1.0" encoding="utf-8"?>
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/castMiniController"
              class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:visibility="gone"/>
    
    ViewStub miniControllerStub = (ViewStub) findViewById(R.id.cast_minicontroller);
    if (isGPSAvailable) {
        miniControllerStub.inflate();
    }
    

  •  类似资料:
    • 在Corda 3.3中,我定义了以下流程: 当我的节点执行此流时,我收到以下异常。原因是什么?

    • 我在尝试写入谷歌商店时得到一个IOException 堆栈跟踪已连接 代码如下 我正在使用App Engine SDK 1.6.4 谢谢

    • 但是,该方法(authContext.AcquireTokenAsync)与其他参数(如客户端id等)很好地配合使用,如下所示。result=await authContext.AcquireTokenSilentAsync(ResourceId,clientId); UWP是否对具有ClientCredential(clientid,key)的AuthContext.AcquireTokenSi

    • 问题内容: 这可能有些琐碎,但我希望获得一些帮助。 我得到: 做的时候: 谁能告诉我原因是什么? 问题答案: 在Java EE受管上下文中,获取对与EntityManager关联的EntityTransaction实例的引用是非法的。从EntityManager.getTransaction()的Java EE API文档中: 返回资源级的EntityTransaction对象。EntityTra

    • 我正在尝试使用Jprofiler的离线分析API将Jprofiler 8.1.4与jenkins集成。下面是写入的程序 > 开始JProfiler录制。 保存快照。 停止JProfiler录制。 导入java。io。文件导入java。io。IOException; 公共类TestJenJPIntegration{public static Connection connObj=null;publi

    • 这是我的客户端代码 这是我的Rest控制器代码: 如果我在调用后使用 String.class 作为返回类型,则相同的代码也有效。但不是响应实体类。我做错了什么,如果我需要客户端也相同的响应实体