2017-11-12 4 views
0

ビデオを連続して挿入すると、すべてのビデオがプレイリストに挿入されますが、時間がかかります。マルチスレッドを使用すると、ビデオの半分以上が最後に欠落しています。動画を失うことなく複数の動画をすばやく挿入するにはどうすればよいですか?マルチスレッドを使用して複数のビデオをプレイリストに挿入するとビデオが失われる

// Insert videos. 5 videos per asyncTask 
List<List<YTVideo>> chunks = Lists.partition(videos, 5); 
for (int i = 0; i < chunks.size(); i++) { 
    videoAndPlaylistContainer container = new videoAndPlaylistContainer(); 
    container.playlistId = playlistId; 
    List<YTVideo> chunk = chunks.get(i); 
    container.videos = chunk; 
    InsertPlayListItemTask insertPlaylistItemsTask = new InsertPlayListItemTask(); 
    runningTasks.add(insertPlaylistItemsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,container)); 

} 

private class InsertPlayListItemTask extends AsyncTask<videoAndPlaylistContainer, Void, Void>{ 

     @Override 
     protected Void doInBackground(videoAndPlaylistContainer... params) { 
      videoAndPlaylistContainer container = params[0]; 
      List<YTVideo> videosChunk = container.videos; 
      String playlistId = container.playlistId; 
      for (int i = 0; i < videosChunk.size(); i++) { 
       YTVideo video = videosChunk.get(i); 
       String videoId = video.getId(); 
       long pos = video.getPosition(); 
       try { 
        ResourceId resourceId = new ResourceId(); 
        resourceId.setKind("youtube#video"); 
        resourceId.setVideoId(videoId); 

        PlaylistItemSnippet playlistItemSnippet = new PlaylistItemSnippet(); 
        // playlistItemSnippet.setTitle("First video in the test playlist"); 
        playlistItemSnippet.setPlaylistId(playlistId); 
        playlistItemSnippet.setResourceId(resourceId); 
        playlistItemSnippet.setPosition(pos); 

        PlaylistItem playlistItem = new PlaylistItem(); 
        playlistItem.setSnippet(playlistItemSnippet); 


        YouTube.PlaylistItems.Insert playlistItemsInsertCommand = 
          youtube.playlistItems().insert("snippet", playlistItem); 

        playlistItemsInsertCommand.execute(); 

        System.out.println("Inserted video: " + video); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      return null; 
     } 

edit:videos.size()〜chunks.size()。 insertedCount ++を削除しました。

答えて

0

この行は、右を見ていない...

for (int i = 0; i < videos.size(); i++) { 

i変数はvideosコレクションのサイズに基づいていますが、しかchunks内の要素にアクセスするためにi変数を使用して成長しますあなたは(最終的に)ArrayIndexOutOfBounds例外を取得しない理由はここに集まり...

List<YTVideo> chunk = chunks.get(i); 

私は多分あなたはより少ない5 Vで(これまでに)あなたのコードをテストしている以外、想像することはできませんイデオロ

+0

あなたは誤りです。私は別のものを試している間にそれを変更することを忘れました。その問題は依然としてその修正で残っています – code511788465541441

+0

私は参照してください。あなたは何のために 'insertedCount'変数を使用していますか? (AFAIKは 'chunks.size()'または '5'の値に達するだけです)。 –

+0

いいえ、それは私が連続して挿入していたときから残されています。 – code511788465541441

関連する問題