直接调用ArrayList的最后一项

时间:2017-08-22 02:25:13

标签: java android arrays arraylist

我正在使用 String Arrays 以正确的顺序执行某些任务[假设播放视频]并 正常工作 根据expectations,请参阅以下代码:

    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并且在结束它播放str3

但是 ,如果我使用 for loop 来达到相同的效果,我就是 facing an issue ,它直接播放 str3 (列表中的第3项[即 - 第2个索引]),跳过 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循环的情况下出了什么问题

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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))));
    }
}