Java 直接调用ArrayList的最后一项

Java 直接调用ArrayList的最后一项,java,android,arrays,arraylist,Java,Android,Arrays,Arraylist,我正在使用字符串数组以正确的顺序执行某些任务[假设播放视频],并且它按照期望工作,请参见以下代码: String[] videoUriList = {str1, str2, str3}; if(null != videoUriList && videoUriList.length > 1) { // Plays the first video, then the second video. m

我正在使用
字符串数组
以正确的顺序执行某些任务[假设播放视频],并且它按照
期望
工作,请参见以下代码:

    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]))
       );
    }
结果:
使用上面的场景,它只能以正确的顺序播放视频,首先它从str1开始。。。然后在完成str1之后,它移动到str2,最后播放str3

但是,如果我使用for循环来实现相同的结果,我将面临一个问题,它直接播放str3(列表的第三项[即-第二个索引]),简而言之,跳过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)));

        }

      }

所以我犯了错误,在for循环中发生了什么错误

您不能增量调用构造函数。您需要收集参数,然后创建结果。在这种情况下,我们仍然可以使用循环将值收集到数组中,然后将该数组传递给构造函数:

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);
MediaSource[]mediaSources=newmediasource[arrayList.size()];
对于(int i=0;i
不能增量调用构造函数。您需要收集参数,然后创建结果。在这种情况下,我们仍然可以使用循环将值收集到数组中,然后将该数组传递给构造函数:

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);
MediaSource[]mediaSources=newmediasource[arrayList.size()];
对于(int i=0;i
你的
for
循环在每次迭代中设置你的单一
媒体源代码。但是,只有一个-因此,在循环执行后,您将拥有最后一个
mediaSource
。如果要保留所有的
mediaSource
,可以使用相应的
列表。大概

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))));
    }
}
List arrayList=Arrays.asList(str1、str2、str2);
List mediaSources=new ArrayList();
if(null!=arrayList){
Log.d(“arrayList::”,String.valueOf(arrayList.size());
对于(int i=0;i
你的
for
循环在每次迭代中设置你的单一
媒体源代码。但是,只有一个-因此,在循环执行后,您将拥有最后一个
mediaSource
。如果要保留所有的
mediaSource
,可以使用相应的
列表。大概

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))));
    }
}
List arrayList=Arrays.asList(str1、str2、str2);
List mediaSources=new ArrayList();
if(null!=arrayList){
Log.d(“arrayList::”,String.valueOf(arrayList.size());
对于(int i=0;i
不要使用代码标记突出显示单词。如果这是关于exoplayer的,则应在问题上包含标记。不要使用代码标记突出显示单词。如果这是关于exoplayer的,则应在问题上包含标记。完成。mediaSources[i]=buildMediaSource(Uri.parse(string));完成。mediaSources[i]=buildMediaSource(Uri.parse(string));