2017-08-22 154 views
0

我使用String Arrays來執行一些任務[承擔播放視頻]在一個正確的順序和它工作爲每expectations,請參閱下面的代碼:直接調用ArrayList中的最後一個項目

String[] videoUriList = {str1, str2, str3}; 

    if(null != videoUriList && videoUriList.length > 1) { 
       // Plays the first video, then the second video. 
       mediaSource = new ConcatenatingMediaSource(
         buildMediaSource(Uri.parse(videoUriList[0])), 
         buildMediaSource(Uri.parse(videoUriList[1])), 
         buildMediaSource(Uri.parse(videoUriList[2])) 
     ); 
    } 

RESULT:在一個正確的順序使用上述情況下其播放的視頻只,首先它STR1開始的......然後STR1完成後,它的動作到STR2賽車。如果我使用for循環來實現同樣的結果在最後它起着STR3

,我facing an issue,它可以直接播放STR3(第3項該列表[即 - 第二個索引])簡而言之,跳過 str1和str2來玩。

ArrayList<String> arrayList = new ArrayList<String>(); 
    arrayList.add(str1); 
    arrayList.add(str2); 
    arrayList.add(str3); 

    if(null != arrayList) { 

     Log.d("arrayList::", String.valueOf(arrayList.size())); 

     for(int i=0; i<arrayList.size(); i++) 
     { 
     String string = arrayList.get(i); 
     Log.d("string::", string+", "+String.valueOf(i)); 

     mediaSource = new ConcatenatingMediaSource(buildMediaSource(Uri.parse(string))); 

     } 

     } 

LOG說:

D/arrayList::: 3 
D/string::: http://www.storiesinflight.com/js_videosub/jellies.mp4, 0 
D/string::: http://clips.vorwaerts-gmbh.de/VfE_html5.mp4, 1 
D/string::: http://www.html5videoplayer.net/videos/toystory.mp4, 2 

那麼,我做的錯誤,是什麼地方出了問題的for循環

+1

不要使用代碼降級來突出顯示單詞。 – shmosel

+0

如果這是關於exoplayer的,你應該在問題中加上標籤。 – shmosel

回答

2

不能調用構造函數的情況下增量。您需要收集參數然後創建結果。在這種情況下,我們仍然可以使用循環收集值到一個數組,然後該數組傳遞給構造函數:

MediaSource[] mediaSources = new MediaSource[arrayList.size()]; 
for (int i = 0; i < arrayList.size(); i++) { 
    String string = arrayList.get(i); 
    Log.d("string::", string+", "+String.valueOf(i)); 
    mediaSources[i] = buildMediaSource(Uri.parse(string)); 
} 
mediaSource = new ConcatenatingMediaSource(mediaSources); 
+0

完成。 mediaSources [i] = buildMediaSource(Uri.parse(string)); – Sophie

1

for循環在每次迭代設置你的奇異mediaSource。但是,只有一個 - 所以循環執行後,您將有最後mediaSource。如果您想保留所有mediaSource(s),則可以使用相應的List。類似的,

List<String> arrayList = Arrays.asList(str1, str2, str2); 
List<ConcatenatingMediaSource> mediaSources = new ArrayList<>(); 
if (null != arrayList) { 
    Log.d("arrayList::", String.valueOf(arrayList.size())); 
    for (int i = 0; i < arrayList.size(); i++) { 
     String string = arrayList.get(i); 
     Log.d("string::", string + ", " + String.valueOf(i)); 
     mediaSources.add(new ConcatenatingMediaSource(
       buildMediaSource(Uri.parse(string)))); 
    } 
} 
相關問題