You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用Uri.parse()解析ArrayList<POJO>?代码实现疑问咨询

关于Uri.parse()解析ArrayList的问题解答

嘿,我来帮你理清楚这个问题:

首先直接给结论:完全不能用Uri.parse()来解析ArrayList类型的数据,你的代码实现也不可行,原因如下:

为什么你的代码行不通?

Uri.parse()方法的参数要求是String类型,它的作用是将符合URI格式的字符串(比如网络视频地址"https://example.com/video.mp4"、本地文件路径"file:///sdcard/video.mp4")解析成Uri对象。而你传入的videoURL是ArrayList<StepsModel>类型的集合对象,和String类型完全不匹配,这在编译阶段就会直接报错,更别说运行了。

正确的处理方式

假设你的StepsModel类中包含存储视频URL字符串的字段(比如videoUrl),你需要先从每个StepsModel对象中取出对应的URL字符串,再逐个用Uri.parse()解析,最后构建对应的MediaSource。

举个具体的实现示例:

首先确认StepsModel的结构(假设):

public class StepsModel {
    private String videoUrl; // 存储视频URL的字段

    // 提供getter方法获取URL
    public String getVideoUrl() {
        return videoUrl;
    }
}

然后处理ArrayList中的数据:

ArrayList<StepsModel> videoURLList = new ArrayList<>();
// 假设这里已经给videoURLList添加了有效的StepsModel数据

List<MediaSource> mediaSourceList = new ArrayList<>();
for (StepsModel model : videoURLList) {
    String urlStr = model.getVideoUrl();
    // 先检查URL是否有效,避免空指针或无效URI
    if (urlStr != null && !urlStr.trim().isEmpty()) {
        Uri uri = Uri.parse(urlStr);
        MediaSource mediaSource = buildMediaSource(uri);
        mediaSourceList.add(mediaSource);
    }
}

// 如果需要将多个视频合并成一个连续播放的源(比如用ExoPlayer的话)
if (!mediaSourceList.isEmpty()) {
    MediaSource combinedMediaSource = new ConcatenatingMediaSource(mediaSourceList.toArray(new MediaSource[0]));
    // 后续可以将combinedMediaSource设置给播放器
}

额外注意事项

  • 确保从StepsModel中取出的URL字符串是合法的URI格式,网络地址要带协议(http/https),本地文件要带file://前缀;
  • 记得做非空检查,避免因空字符串或null导致的解析异常;
  • 如果你的buildMediaSource方法需要处理多个源,要根据实际需求选择合适的MediaSource组合方式(比如上述的ConcatenatingMediaSource)。

内容的提问来源于stack exchange,提问作者Pri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:24:41