问题描述
扫描本地音乐文件并放入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; }
模拟器内的音乐文件只有一个,而且是文件名全英,如图:
在模拟器里测试生成列表,显示全部为问号的乱码,如图:
用真机来测试,有些是乱码,有些能正常显示(有些中文也能正常显示),如图:
请问应该怎么解决这个乱码问题,网上找的方法不管用,望各位大神出手相助了!
解决方案1
getListByLocal函数里最后需要执行cursor.close(),不然就可能出现乱码(这个和cursor内部的内存管理有关系)。
解决方案2
你用模拟器测试下,难道你的英文是全角的
时间: 2024-10-18 11:19:25