如何使用Mp3agic jar Android studio从MP3文件获取ID3歌词标签?

问题描述

我需要从mp3歌曲中获取歌词

Mp3File mp3file = new Mp3File(file);
       
if (mp3file.hasId3v2Tag()) {

   ID3v2 id3v2Tag = mp3file.getId3v2Tag();
   Log.d("Lyrics",id3v2Tag.getLyrics());
}

仅我正在使用的上述代码。但是它返回“ java.lang.NullPointerException”。请帮助我解决这个问题。

完整的崩溃报告

E / Android运行时:致命异常:主要 程序:in.example.mp3tag,PID:10237 java.lang.RuntimeException:无法启动活动ComponentInfo {in.example.mp3tag / in.example.mp3tag.Main2Activity}:java.lang.NullPointerException:println需要消息 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2904) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2986) 在android.app.ActivityThread.-wrap11(未知来源:0) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1671) 在android.os.Handler.dispatchMessage(Handler.java:108) 在android.os.Looper.loop(Looper.java:206) 在android.app.ActivityThread.main(ActivityThread.java:6784) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:852) 原因:java.lang.NullPointerException:println需要一条消息 在android.util.Log.println_native(本地方法) 在android.util.Log.d(Log.java:320) 在in.example.mp3tag.Main2Activity.onCreate(Main2Activity.java:200) 在android.app.Activity.performCreate(Activity.java:6984) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1235) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2857) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2986) 在android.app.ActivityThread.-wrap11(未知来源:0) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1671) 在android.os.Handler.dispatchMessage(Handler.java:108) 在android.os.Looper.loop(Looper.java:206) 在android.app.ActivityThread.main(ActivityThread.java:6784) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:852)

解决方法

由于id3v2Tag.getLyrics()返回了null,而您正在使用Log.d(String tag,String msg),因此您得到了例外。请参阅有关此方法here的文档。

public static int d(字符串标记,字符串味精) ...字符串:您要记录的消息。 该值不能为空

如果要对可能的空对象使用Log.d,请使用Log.d(String tag,String msg,Throwable tr)。请参阅文档here

因此id3v2Tag.getLyrics()返回null。您正在使用的库提供的文档很少,但是我假设getLyrics()在没有歌词且没有空字符串的情况下返回null。如果您正确测试getLyrics()的结果,那么对于其余的代码来说,这可能不是问题,就像这样:

String lyrics = id3v2Tag.getLyrics();
if (lyrics != null) {
  // Lyrics found,add your code here
} else {
  // No lyrics
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...