NullPointerException异常上super.onStart() [英] NullPointerException on super.onStart()

查看:305
本文介绍了NullPointerException异常上super.onStart()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前我正在写一个扩展,扩展YouTubePlayerSupportFragment定制SherlockFragment片段。不幸的是,应用程序崩溃。

Currently I'm writing Fragment that extends custom SherlockFragment that extends YouTubePlayerSupportFragment. Unfortunately, app crashes.

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异常是发生在行:

What is most interesting is that LogCat shows there's NullPointerException that happens in line:

    super.onStart();

下面是LogCat中:

Here's 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)

什么是错的这个code?

What is wrong with this code?

推荐答案

这不是在SDK清楚,但据我能够做出来,你不延长YouTubePlayerFragment。您只需在您的布局片段(它可以作为一个嵌套的片段太)。

It's not clear in the SDK but as far as I was able to work it out, you don't extend YouTubePlayerFragment. You simply include the fragment in your layout (it works as a nested fragment too).

基本上,你有两种选择:

Basically you have two alternatives:


  • 拓展YouTubeBaseActivity和膨胀的布局,其中包括一个YouTubePlayerView - 它的工作原理,但你不能使用片段

  • extend YouTubeBaseActivity and inflate a layout which includes a YouTubePlayerView - it works but you can't use Fragments

使用您最喜欢的活动和膨胀的布局,其中包括了YouTubePlayerFragment。 不要延长它

Use your favourite Activity and inflate a layout which includes the YouTubePlayerFragment. Do not extend it.

我已经成功添加YoutubePlayerFragment为嵌套片段太(更新:这会导致一些内存泄漏,所以你可能preFER,以避免它)。您可以添加其他组件围绕YouTubePlayerFragment但要小心,因为<一个href=\"https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubePlayerFragment\"相对=nofollow>文档说,而视频播放则无法覆盖这一观点与其他观点。

I have successfully added the YoutubePlayerFragment as a nested fragment too (update: this causes some memory leaks so you might prefer to avoid it). You can add other components around the YouTubePlayerFragment but be careful as the docs say you can't overlay this view with other view while the video is playing.

所以,解决你的问题并不延伸YouTubePlayerFragment,只需将其包含在你的布局。通过调用初始化这个片断,你会得到中,你可以用它来控制视频的回调YouTubePlayer。

So, to solve your problem don't extend YouTubePlayerFragment, simply include it in your layout. By calling initialize on this fragment you will get a YouTubePlayer in the callback which you can use to control the video.

这篇关于NullPointerException异常上super.onStart()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆