Cursor扫描本地音乐文件,英文名也出现乱码,怎么解决。

吾非名家 2014-10-13 11:56:43
扫描本地音乐文件并放入List的代码如下:
public List<LocalMp3> getListByLocal() {
Cursor cursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
List<LocalMp3> localMp3s = new ArrayList<LocalMp3>();
for (int i = 0; i < cursor.getCount(); i++) {
LocalMp3 localMp3 = new LocalMp3();
cursor.moveToNext();
String title = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ARTIST));
long duration = cursor.getLong(cursor
.getColumnIndex(MediaStore.Audio.Media.DURATION));
String mp3url = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA));
int isMusic = cursor.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 判断是否音乐
if (isMusic != 0) {
localMp3.setTitle(title);
localMp3.setArtist(artist);
localMp3.setDuration(duration);
localMp3.setMp3url(mp3url);
localMp3s.add(localMp3);
}
}
return localMp3s;
}

模拟器内的音乐文件只有一个,而且是文件名全英,如图:

在模拟器里测试生成列表,显示全部为问号的乱码,如图:

用真机来测试,有些是乱码,有些能正常显示(有些中文也能正常显示),如图:


请问应该怎么解决这个乱码问题,网上找的方法不管用,望各位大神出手相助了!
...全文
324 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vsmj012 2014-11-01
  • 打赏
  • 举报
回复

我的没有标题怎么办?
吾非名家 2014-10-13
  • 打赏
  • 举报
回复
引用 7 楼 svenwang 的回复:
引用 6 楼 svenwang 的回复:
[quote=引用 4 楼 u010445247 的回复:] [quote=引用 3 楼 svenwang 的回复:] [quote=引用 2 楼 u010445247 的回复:] [quote=引用 1 楼 svenwang 的回复:] getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
我在返回的前一句添加了cursor.close(); 但是仍然乱码。。有更好的解决办法吗?
那你需求确认一下乱码是出现在这个函数里,还是你的UI代码有问题。 可以调试看看getListByLocal返回的是不是乱码。 [/quote]不清楚是不是代码问题,全部代码都没有改过编码的,真机测试的时候奇怪的是有些中文能显示,有些英文不能显示[/quote] 我试了那个函数没有问题(增加了关闭游标的语句)。可能是你字符编码没有设置好,请检查是否utf8编码;要不然就是你的UI代码的问题。[/quote] 补充:我是用utf8编码中文名的文件进行测试。[/quote]解决了,其实是歌曲文件属性里的标题和艺术家那里设置的内容的问题。。要逐一修改。。。有点麻烦呢。。另外多谢你对本帖的关注!
吾非名家 2014-10-13
  • 打赏
  • 举报
回复
引用 5 楼 DrSmart 的回复:
你用模拟器测试下,难道你的英文是全角的
解决了,其实是歌曲文件属性里的标题和艺术家那里设置的内容的问题。。要逐一修改。。。有点麻烦呢。。
svenwang 2014-10-13
  • 打赏
  • 举报
回复
引用 6 楼 svenwang 的回复:
引用 4 楼 u010445247 的回复:
[quote=引用 3 楼 svenwang 的回复:] [quote=引用 2 楼 u010445247 的回复:] [quote=引用 1 楼 svenwang 的回复:] getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
我在返回的前一句添加了cursor.close(); 但是仍然乱码。。有更好的解决办法吗?
那你需求确认一下乱码是出现在这个函数里,还是你的UI代码有问题。 可以调试看看getListByLocal返回的是不是乱码。 [/quote]不清楚是不是代码问题,全部代码都没有改过编码的,真机测试的时候奇怪的是有些中文能显示,有些英文不能显示[/quote] 我试了那个函数没有问题(增加了关闭游标的语句)。可能是你字符编码没有设置好,请检查是否utf8编码;要不然就是你的UI代码的问题。[/quote] 补充:我是用utf8编码中文名的文件进行测试。
svenwang 2014-10-13
  • 打赏
  • 举报
回复
引用 4 楼 u010445247 的回复:
引用 3 楼 svenwang 的回复:
[quote=引用 2 楼 u010445247 的回复:] [quote=引用 1 楼 svenwang 的回复:] getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
我在返回的前一句添加了cursor.close(); 但是仍然乱码。。有更好的解决办法吗?
那你需求确认一下乱码是出现在这个函数里,还是你的UI代码有问题。 可以调试看看getListByLocal返回的是不是乱码。 [/quote]不清楚是不是代码问题,全部代码都没有改过编码的,真机测试的时候奇怪的是有些中文能显示,有些英文不能显示[/quote] 我试了那个函数没有问题(增加了关闭游标的语句)。可能是你字符编码没有设置好,请检查是否utf8编码;要不然就是你的UI代码的问题。
DrSmart 2014-10-13
  • 打赏
  • 举报
回复
你用模拟器测试下,难道你的英文是全角的
吾非名家 2014-10-13
  • 打赏
  • 举报
回复
引用 3 楼 svenwang 的回复:
引用 2 楼 u010445247 的回复:
[quote=引用 1 楼 svenwang 的回复:] getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
我在返回的前一句添加了cursor.close(); 但是仍然乱码。。有更好的解决办法吗?
那你需求确认一下乱码是出现在这个函数里,还是你的UI代码有问题。 可以调试看看getListByLocal返回的是不是乱码。 [/quote]不清楚是不是代码问题,全部代码都没有改过编码的,真机测试的时候奇怪的是有些中文能显示,有些英文不能显示
svenwang 2014-10-13
  • 打赏
  • 举报
回复
引用 2 楼 u010445247 的回复:
引用 1 楼 svenwang 的回复:
getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
我在返回的前一句添加了cursor.close(); 但是仍然乱码。。有更好的解决办法吗?
那你需求确认一下乱码是出现在这个函数里,还是你的UI代码有问题。 可以调试看看getListByLocal返回的是不是乱码。
吾非名家 2014-10-13
  • 打赏
  • 举报
回复
引用 1 楼 svenwang 的回复:
getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
我在返回的前一句添加了cursor.close(); 但是仍然乱码。。有更好的解决办法吗?
svenwang 2014-10-13
  • 打赏
  • 举报
回复
getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧