6991


現在`YouTube Player
API`を使ったadnroidアプリを作っているのですが､以下のようなコードでインスタンスを管理しているのですが､画面回転後に参照するとnullになっています｡画面回転後も同じインスタンスを参照することはできますか?

**コード:**

[code]

    @Override
    public void onStart(){
        super.onStart();
        Log.d("onstart", "onstart");
        if(playerInstance==null||player==null){
            //YouTube player apiを初期化
            initYouTube();
        }
    }
    
    //Initialize YouTube player
    private void initYouTube(){
        //プレイヤを読み込む
        player = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);
        //プレイヤーを初期化
        player.initialize(apiKey, this);
    }
    
[/code]

**初期化完了時に呼び出されるコールバックメソッド:**

[code]

    //Player関連メソッド
    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean b) {
        if(!b){
            //ここでインスタンスを保持している｡
            this.playerInstance = youTubePlayer;
            youTubePlayer.loadVideo(videoId);
            prevVideoIdList.add(videoId);
    
            //If it is smart phone and orientation is land, use full screen
            Context context = getApplicationContext();
            Resources r = context.getResources();
            Configuration configuration = r.getConfiguration();
            if(Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB_MR2){
                if((configuration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
                        <Configuration.SCREENLAYOUT_SIZE_LARGE){
                    youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
                            | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
                }else{
                    youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
                }
            }else{
                if(configuration.smallestScreenWidthDp<600){
                    youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
                            | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
                }else{
                    youTubePlayer.setFullscreenControlFlags(YouTubePlayer.FULLSCREEN_FLAG_CONTROL_ORIENTATION | YouTubePlayer.FULLSCREEN_FLAG_CONTROL_SYSTEM_UI);
                }
            }
        }
    }
    
[/code]

画面回転後に以下のメソッドを呼び出すとYouTubePlayerのインスタンスがnullなので`NullPointerException`が出ていしまいます｡

**YouTube Playerインスタンスを参照するメソッド:**

[code]

    //Listener of RelatedVideoFragment
    @Override
    public void moveActivity(int position){
        playerInstance.loadVideo(relateVideoIds.get(position-1));
        //Update View
        prevVideoIdList.add(relateVideoIds.get(position-1));
        videoId=relateVideoIds.get(position-1);
        //relateVideoIds is initialized, and relateVideoItems is initialized
        relateVideoIds = new ArrayList<>();
        relateVideoItems = new ArrayList<>();
        relateVideoSearch();
    }
    
    //If customer push previous video's button, play previous video
    @Override
    public void playPrev(){
        if(prevVideoIdList!=null&&prevVideoIdList.size()!=1) {
            playerInstance.loadVideo(prevVideoIdList.get(prevVideoIdList.size()-2));
            videoId = prevVideoIdList.get(prevVideoIdList.size()-2);
            prevVideoIdList.remove(prevVideoIdList.size()-2);
            relateVideoIds = new ArrayList<>();
            relateVideoItems = new ArrayList<>();
            relateVideoSearch();
        }else if(prevVideoIdList!=null&&prevVideoIdList.size()==1){
            finish();
        }
    }
    
[/code]

**追記:**

画面回転時にレイアウトを変更するので、AndroidManifestでorientation|ScreenSizeを設定する方法はつかえないとおもいます


CC BY-SA 3.0
2015-02-23T10:04:13.400
6963
2015-02-24T01:44:03.927
2015-02-23T10:31:50.717
7232
7232
question
android youtube-player-api
画面回転後にYouTubePlayerのインスタンスがnullになってしまいます｡


`moveActivity()`と`playPrev()`を実行した時にYouTubePlayerを初期化するようにしたところ､ひとまず`nullPointerException`は防げました｡
しかしこれだと､次の動画が始まらないので改善が必要であります｡


CC BY-SA 3.0
2015-02-24T01:44:03.927
6991
2015-02-24T01:44:03.927
7232
6963
answer