Android Studio中Firebase Storage无法按字母顺序排序文件的解决方法
解决方案
Firebase Storage 的 listAll() 接口默认返回的文件列表是按上传时间排序的,你不需要重新上传文件,只需要在获取到文件列表后,手动对列表进行排序即可实现按文件名字母顺序排列。
具体修改步骤如下:
- 在获取到文件列表后,添加排序逻辑,通过
Collections.sort()结合自定义比较器,根据文件名的字符串顺序排序 - 排序完成后再遍历列表处理文件
修改后的关键代码段:
@Override public void onSuccess(ListResult listResult) { List<StorageReference> list = listResult.getItems(); // 新增:按文件名字母顺序排序 Collections.sort(list, new Comparator<StorageReference>() { @Override public int compare(StorageReference o1, StorageReference o2) { // 比较两个文件的名称字符串,实现自然排序 return o1.getName().compareTo(o2.getName()); } }); for (StorageReference str : list) { long SIZE = 1024 * 1024; str.getBytes(SIZE).addOnSuccessListener(new OnSuccessListener<byte[]>() { @Override public void onSuccess(byte[] bytes) { saveData(bytes, str.getName(), finalI1); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.d("SlashLog", "Firebase Exception: " + e.getMessage()); } }); } }
说明
String.compareTo() 方法会按照字符串的自然规则排序,刚好匹配你需要的 001.png → 002.png → ... 的顺序(因为你文件名的数字前缀是固定位数,字符串排序结果和数值排序结果一致)。如果后续文件名格式有变化,比如非固定位数的数字,可根据实际需求调整比较逻辑。
内容的提问来源于stack exchange,提问作者Sheraz
相关产品推荐
相关产品推荐

