无法加载我本地的krc歌词文件
liuhaifang opened this issue · comments
我把demo下载下来后,把hplyricslibrary模块导入项目,加载raw下面的歌词文件正常,加载文件夹里面的给出文件报错:
代码如下:
protected String doInBackground(String... strings) {
if(StringUtil.isEmpty(banzou.krcFilePath)){
return null;
}
File krcFile=new File(banzou.krcFilePath);
if(krcFile==null || !krcFile.exists())
return null;
InputStream inputStream;
try {
// inputStream = getResources().openRawResource(R.raw.aa);
// inputStream = new FileInputStream(krcFile);
//延迟看一下加载效果
Thread.sleep(500);
LyricsReader lyricsReader = new LyricsReader();
// byte[] data = new byte[inputStream.available()];
// inputStream.read(data);
// lyricsReader.loadLrc(data, null, krcFile.getName());
lyricsReader.loadLrc(krcFile);
mManyLyricsView.setLyricsReader(lyricsReader);
//
if (mMediaPlayer != null && mMediaPlayer.isPlaying() && mManyLyricsView.getLrcStatus() == ManyLyricsView.LRCSTATUS_LRC && mManyLyricsView.getLrcPlayerStatus() != ManyLyricsView.LRCPLAYERSTATUS_PLAY) {
mManyLyricsView.play(mMediaPlayer.getCurrentPosition());
}
// inputStream.close();
} catch (Exception e) {
mManyLyricsView.setLrcStatus(ManyLyricsView.LRCSTATUS_ERROR);
// Log.e(TAG, e.toString());
e.printStackTrace();
}
inputStream = null;
return null;
}
}.execute("");
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:366)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
Caused by: java.lang.AssertionError: java.util.zip.ZipException: incorrect header check
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:69)
at com.zlm.hp.lyrics.formats.krc.KrcLyricsFileReader.readInputStream(KrcLyricsFileReader.java:85)
at com.zlm.hp.lyrics.formats.LyricsFileReader.readFile(LyricsFileReader.java:34)
at com.zlm.hp.lyrics.LyricsReader.loadLrc(LyricsReader.java:75)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:542)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:520)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
... 4 more
Caused by: java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:65)
... 11 more
java.lang.AssertionError: java.util.zip.ZipException: incorrect header check
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:69)
at com.zlm.hp.lyrics.formats.krc.KrcLyricsFileReader.readInputStream(KrcLyricsFileReader.java:85)
at com.zlm.hp.lyrics.formats.LyricsFileReader.readFile(LyricsFileReader.java:34)
at com.zlm.hp.lyrics.LyricsReader.loadLrc(LyricsReader.java:75)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:542)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:520)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
Caused by: java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:65)
... 11 more
java.util.zip.ZipException: incorrect header check
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:175)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.zlm.hp.lyrics.utils.StringCompressUtils.decompress(StringCompressUtils.java:65)
at com.zlm.hp.lyrics.formats.krc.KrcLyricsFileReader.readInputStream(KrcLyricsFileReader.java:85)
at com.zlm.hp.lyrics.formats.LyricsFileReader.readFile(LyricsFileReader.java:34)
at com.zlm.hp.lyrics.LyricsReader.loadLrc(LyricsReader.java:75)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:542)
at com.chunyin.tab2.KGeActivity$11.doInBackground(KGeActivity.java:520)
at android.os.AsyncTask$2.call(AsyncTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)
@liuhaifang
1.麻烦用酷狗音乐播放器看看能不能打开你调用的krc文件
2.如果1可以,麻烦提供一下你调用的krc文件
@zhangliangming 好的, 谢谢楼主,我用你的demo的krc歌词文件放到我手机文件存储里面,是可以读取正常显示,我自己的歌词文件在手机存储里面是读取报上面那个错误,但是我自己的歌词文件放到项目的raw目录下又可以正常打开播放的,以下是我的krc歌词文件
@zhangliangming 有没有一个加载歌词的方法,这个方法只有一个参数,就是普通的utf-8的字符串,这个字符串是我自己解析出来的。因为歌词文件太多了,有些网站的歌词文件加载会报错 。如果有个一个方法可以直接加载字符串,那么歌词文件解析可以由第三方来做,比如直接调用这个链接,得到歌词的文本字符串。
https://v1.itooi.cn/netease/lrc?id=37239038
比如这个在qq音乐里面下载的歌词,加载会直接闪退
陈奕迅 - K歌之王 (粤语).lrc.zip
@liuhaifang 我看了一下歌词的内容,你歌词内容,没有换行符。这个应该是报错的原因。
1.如果加载链接读取歌词的文本,这样子耦合性太强了,各个链接返回的数据也不一样。
2.最新代码,目前只有网易云歌词是支持传歌词内容进去,然后解析的。
@liuhaifang 你k歌之王的歌词是编码是gbk的,需要针对选择lrc歌词格式,使用gbk编码的构造方法来解析才行。目前我的歌词都是默认用utf-8格式的。
好的,明白了,谢谢