0

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

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

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

上面的代码只有我在使用。但它返回“java.lang.NullPointerException”。请帮我解决这个问题。

完整的崩溃报告

E/AndroidRuntime:致命异常:主进程:in.example.mp3tag,PID:10237 java.lang.RuntimeException:无法启动活动 ComponentInfo{in.example.mp3tag/in.example.mp3tag.Main2Activity}:java.lang。 NullPointerException:println 需要在 android.app.ActivityThread.-wrap11(未知来源:0 ) 在 android.os.Handler.dispatchMessage(Handler.java:108) 在 android.os.Looper.loop(Looper.java:206) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1671) 在 android .app.ActivityThread.main(ActivityThread.java:6784) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com .android.internal.os.ZygoteInit。main(ZygoteInit.java:852) 引起:java.lang.NullPointerException: println 需要在 android.util.Log.d(Log.java:320) 的 android.util.Log.println_native(Native Method) 处的消息.example.mp3tag.Main2Activity.onCreate(Main2Activity.java:200) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1235) 在 android.app.Activity.performCreate(Activity.java:6984) 在 android.app。 ActivityThread.performLaunchActivity(ActivityThread.java:2857) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2986) at android.app.ActivityThread.-wrap11(Unknown Source:0) at 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(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:852) 

4

1 回答 1

0

你得到一个异常,因为id3v2Tag.getLyrics()返回null并且你正在使用Log.d(String tag, String msg). 在此处查看有关此方法的文档。

public static int d (String tag, String msg) ... String:您想要记录的消息。此值不能为 null

如果要Log.d与可能的 null 对象一起使用,请使用Log.d(String tag, String msg, Throwable tr). 请参阅此处的文档。

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

String lyrics = id3v2Tag.getLyrics();
if (lyrics != null) {
  // Lyrics found, add your code here
} else {
  // No lyrics
}
于 2020-08-29T10:03:10.197 回答