如何使用 Mp3agic jar Android studio 从 MP3 文件中获取 ID3 歌词标签?
How to get ID3 Lyrics tag from MP3 file using Mp3agic jar Android studio?
我需要从 mp3 歌曲中获取歌词
Mp3File mp3file = new Mp3File(file);
if (mp3file.hasId3v2Tag()) {
ID3v2 id3v2Tag = mp3file.getId3v2Tag();
Log.d("Lyrics",id3v2Tag.getLyrics());
}
以上代码仅供本人使用。但它返回“java.lang.NullPointerException”。请帮我解决这个问题。
完整的崩溃报告
E/AndroidRuntime:致命异常:main
进程:in.example.mp3tag,PID:10237
java.lang.RuntimeException: 无法启动 activity 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(未知 Source: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)
Caused by: 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(未知 Source: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 (String tag, String msg)
... String: The message you would like logged. This value cannot be null.
如果要对可能的空对象使用 Log.d
,请使用 Log.d(String tag, String msg, Throwable tr)
。请参阅文档 here。
所以id3v2Tag.getLyrics()
returnsnull
。您使用的库提供的文档很少,但我假设 getLyrics()
returns null
没有歌词,也不是空字符串。如果您正确测试 getLyrics()
的结果,这对于您的其余代码可能不是问题,如下所示:
String lyrics = id3v2Tag.getLyrics();
if (lyrics != null) {
// Lyrics found, add your code here
} else {
// No lyrics
}
我需要从 mp3 歌曲中获取歌词
Mp3File mp3file = new Mp3File(file);
if (mp3file.hasId3v2Tag()) {
ID3v2 id3v2Tag = mp3file.getId3v2Tag();
Log.d("Lyrics",id3v2Tag.getLyrics());
}
以上代码仅供本人使用。但它返回“java.lang.NullPointerException”。请帮我解决这个问题。
完整的崩溃报告
E/AndroidRuntime:致命异常:main 进程:in.example.mp3tag,PID:10237 java.lang.RuntimeException: 无法启动 activity 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(未知 Source: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) Caused by: 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(未知 Source: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 (String tag, String msg) ... String: The message you would like logged. This value cannot be null.
如果要对可能的空对象使用 Log.d
,请使用 Log.d(String tag, String msg, Throwable tr)
。请参阅文档 here。
所以id3v2Tag.getLyrics()
returnsnull
。您使用的库提供的文档很少,但我假设 getLyrics()
returns null
没有歌词,也不是空字符串。如果您正确测试 getLyrics()
的结果,这对于您的其余代码可能不是问题,如下所示:
String lyrics = id3v2Tag.getLyrics();
if (lyrics != null) {
// Lyrics found, add your code here
} else {
// No lyrics
}