super.onStart() 上的 NullPointerException

2024-02-06

目前我正在编写扩展自定义 SherlockFragment 的 Fragment,该自定义 SherlockFragment 扩展了 YouTubePlayerSupportFragment。不幸的是,应用程序崩溃了。

CODE:

    public static class YouTubeVideo extends SherlockYouTubeFragment
         implements YouTubePlayer.OnInitializedListener{
private TextView titleview;
private TextView descview;
private TextView countview;
private TextView timeview;
private Bundle data;

 private YouTubePlayer ytp;
private String title;
private String id;
private String desc;
private String count;
private String time;
private int timeint;
private int timem;
private int times;
private Tracker myTracker;
private ShareActionProvider mShareActionProvider;
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    data = getArguments();
    return inflater.inflate(R.layout.youtubeview, container, false);
}

@Override
public void onStart() {
     titleview = (TextView) getView().findViewById(R.id.title);
     descview = (TextView) getView().findViewById(R.id.descriptiontext);
     countview = (TextView) getView().findViewById(R.id.viewcounttext);
     timeview = (TextView) getView().findViewById(R.id.timetext);

     title = data.getString("title");
     id = data.getString("id");
     desc = data.getString("description");
     count = data.getString("viewcount");
     time = data.getString("time");
     EasyTracker.getInstance().setContext(this.getActivity());
     myTracker = EasyTracker.getInstance().getTracker();
     FragmentManager fragmentManager = getFragmentManager();
     FragmentTransaction fragmentTransaction = fragmentManager
             .beginTransaction();

     YouTubePlayerSupportFragment fragment = new YouTubePlayerSupportFragment();
      fragment.initialize(ID, this);
     fragmentTransaction.add(R.id.youtubeplayer, fragment);
     fragmentTransaction.commit();
  titleview.setText(title);
  descview.setText(desc);
  countview.setText(count);
  try {
      timeint = Integer.parseInt(time);
      timem = timeint/60;
      times = timeint - (timem*60);      
  } catch(NumberFormatException nfe) {
    // Handle parse error.
  }
  if (times<10){
timeview.setText(String.valueOf(timem)+":0"+String.valueOf(times));
 }
  else{
      timeview.setText(String.valueOf(timem)+":"+String.valueOf(times));
  }
  super.onStart();
 }

 @Override
 public void onInitializationFailure(Provider arg0,YouTubeInitializationResult arg1) {
  Toast.makeText(this.getActivity(), "Uruchamianie filmu nie powiodło się", Toast.LENGTH_LONG).show();
 }

 @Override
 public void onInitializationSuccess(Provider provider, YouTubePlayer player,boolean wasrestored) {
  ytp = player;
  player.addFullscreenControlFlag(4);
  if(ytp !=null){
        ytp.loadVideo(id);
       }
 }
 public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getSherlockActivity().getSupportMenuInflater();
     inflater.inflate(R.menu.video_menu, menu);
     mShareActionProvider = (ShareActionProvider)menu.findItem(R.id.share).getActionProvider();
     mShareActionProvider.setShareIntent(createShareIntent());

     return true;
 }
 private Intent createShareIntent() {
     myTracker.trackEvent("videoview", "share", title + id, (long) 3);

        Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, title + " - http://ignastv.tk/id/" + id);
    sendIntent.setType("text/plain");
    mShareActionProvider.setShareIntent(sendIntent);
    return sendIntent;
}

 public boolean onOptionsItemSelected(MenuItem item) {
     int itemId = item.getItemId();

        if(itemId == R.id.vidsite){
            myTracker.trackEvent("videoview", "open-in", title + id, (long) 3);
            Intent govideo = new Intent(Intent.ACTION_VIEW);
            govideo.setData(Uri.parse(id));
            startActivity(govideo);
            return true;}

        else {
            return super.onOptionsItemSelected(item);
        }

}

}

最有趣的是 LogCat 显示出现了 NullPointerException:

    super.onStart();

这是 LogCat:

    04-27 20:19:30.055: E/AndroidRuntime(14706): FATAL EXCEPTION: main
    04-27 20:19:30.055: E/AndroidRuntime(14706): java.lang.NullPointerException
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart(Unknown Source)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.app.app.MainActivity$YouTubeVideo.onStart(MainActivity.java:519)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.Fragment.performStart(Fragment.java:1332)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.os.Handler.handleCallback(Handler.java:725)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.os.Handler.dispatchMessage(Handler.java:92)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.os.Looper.loop(Looper.java:137)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.app.ActivityThread.main(ActivityThread.java:5039)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at java.lang.reflect.Method.invokeNative(Native Method)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at java.lang.reflect.Method.invoke(Method.java:511)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at dalvik.system.NativeStart.main(Native Method)

这段代码有什么问题?


SDK 中并不清楚,但据我所知,您没有扩展 YouTubePlayerFragment。您只需将片段包含在布局中(它也可以用作嵌套片段)。

基本上你有两种选择:

  • 扩展 YouTubeBaseActivity 并膨胀包含 YouTubePlayerView 的布局 - 它可以工作,但不能使用 Fragments

  • 使用您最喜欢的 Activity 并膨胀包含 YouTubePlayerFragment 的布局。不要延长它.

我也成功地将 YoutubePlayerFragment 添加为嵌套片段(更新:这会导致一些内存泄漏,因此您可能更愿意避免它)。您可以在 YouTubePlayerFragment 周围添加其他组件,但要小心,因为docs https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerFragment假设您无法在视频播放时将此视图与其他视图叠加。

因此,要解决您的问题,请不要扩展 YouTubePlayerFragment,只需将其包含在您的布局中即可。通过在此片段上调用初始化,您将在回调中获得一个 YouTubePlayer,您可以使用它来控制视频。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

super.onStart() 上的 NullPointerException 的相关文章

  • 房间数据库更改未触发观察者

    当房间数据库更改时 我试图更新 RecyclerView 但是 当数据库发生更改时 不会调用 MainActivity 中定义的观察者的 onChanged 方法 如果我让 DAO 返回 LiveData 而不是 List 并在 ViewM
  • Android:初始化本机 AudioRecord 对象时 AudioRecord 错误代码 -20

    Android 我想从麦克风读取缓冲区 以便我可以对其执行处理 以下是我的代码 int sampleRateInHz 8000 44100 22050 and 11025 int channelConfig AudioFormat CHAN
  • Android 中的 Fragment-Fragment 通信

    我在Android编程方面处于初级水平 所以我需要你真诚的帮助 请任何人帮助我 我正在尝试使用片段构建滑动用户界面 所以我真正的疑问是 我有一个Fragment say FragmentA 它有一个TextView and Button在其
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • 从ListView中隐藏行而不占用空间

    我有一个带有关联 ArrayAdapter 的 ListView 它在多个活动中显示其内容 不幸的是 现在有必要 我的 ListView 在其中一项设置中不显示其所有元素 而仅显示 属性 未设置为 true 的元素 我想避免使用两个具有不同
  • HMS 核心地图套件在我的 Android 应用程序上根本无法工作

    我正在尝试在我的应用程序中使用华为 HMS 地图套件 我对整体地图很陌生 无论是来自谷歌还是华为 我按照文档中的教程以及华为提供的代码实验室中的说明进行操作 并将我的代码在一起 但是当我运行地图活动时 什么也没有出现 我得到的只是一个空白活
  • ExpandableListview OnGroupClickListener 未触发

    我正在关注这个 以编程方式折叠 ExpandableListView 中的组 https stackoverflow com questions 4314777 programmatically collapse a group in ex
  • Internet Explorer 和 Firefox 上的 YouTube IFrame API

    更多的是 答案 而不是 问题 但在其他地方没有找到这个 所以我将其发布在这里 我在所有版本的 IE 和 Firefox 中初始化 iFrame API 时遇到困难 需要进行一些自定义实现 基本上 它会加载 API 但不会创建玩家对象 经过一
  • 选项卡主机内的 Android Fragment 视图状态 [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Fragment 为 Android 中的每个选项卡单独的返回堆栈 https stackoverflow com questions 6987334 separate back stack f
  • MIUI 权限被拒绝活动 KeyguardLocked

    当应用程序处于后台且屏幕被锁定时 我无法启动活动 没有异常或警告 只是不调用 onCreate 我一直在与这个问题作斗争 我想我终于找到了它的根源 日志中有一行 D com android server am ExtraActivityMa
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • YouTube 直播嵌入代码不断变化

    我使用 YouTube 进行直播 并且可以通过将嵌入代码复制到我的网站中来在我的网站上观看它 它看起来像下面这样 但最近我发现 每次进行直播时 我都必须开始使用从直播频道生成的代码来更新网站上的嵌入代码 这是因为它不断重新生成不同的代码 这
  • 在运行时更改用作背景的 Drawable xml 内的形状纯色

    我有一个 Drawable xml 文件 background xml
  • 哪个视图最亮?

    在Android中 哪个是轻量级视图 例如 View Textview Edittext 等 在某些情况下 我们需要使用视图来填充区域而不向用户显示视图 同时屏幕加载速度应该很快 您可以使用空间 android widget Space S
  • Android:GestureDetector 无法与选项卡(TabActivity、Tabwidget)一起工作(gestureDetector.onTouchEvent(event) 始终为 false)

    我已经用不同的子活动实现了 TabActivity intent new Intent setClass this MyChildTabActiviy class Initialize a TabSpec for each tab and
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • 如何更改操作栏背景和文本颜色

    我正在使用本教程中的导航抽屉 http www androidhive info 2013 11 android sliding menu using navigation drawer http www androidhive info
  • Android-dispatchTouchEvent 给了我一个 StackOverflowError

    这里我有一个带有 setOnTouchListener 的 ViewFlipper 它工作得很好 然后我膨胀 ReLayNewsItem 然后将其添加到 ViewFlipper 现在我希望 WebView web 监听触摸事件并将它们传递给
  • Android MulticastSocket.joinGroup 不会触发发送 IGMP 消息

    Code MulticastSocket s new MulticastSocket InetAddress addr InetAddress getByName 230 230 230 1 s joinGroup addr 在 Ubunt

随机推荐