Как получить тег ID3 Lyrics из файла MP3 с помощью Android Studio Mp3agic jar?
Мне нужно получить текст из mp3 песни
Mp3File mp3file = new Mp3File(file);
if (mp3file.hasId3v2Tag()) {
ID3v2 id3v2Tag = mp3file.getId3v2Tag();
Log.d("Lyrics",id3v2Tag.getLyrics());
}
Код выше используется только мной. Но он возвращает "java.lang.NullPointerException". Пожалуйста, помогите мне решить эту проблему.
Полный отчет о сбое
E/AndroidRuntime: FATAL EXCEPTION: основной процесс: 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) Â
1 ответ
Вы получаете исключение, потому что id3v2Tag.getLyrics()
вернулся null
и вы используете Log.d(String tag, String msg)
. См. Документацию по этому методу здесь.
public static int d (String tag, String msg)... String: сообщение, которое вы хотите зарегистрировать. Это значение не может быть нулевым.
Если вы хотите использовать Log.d
с возможными нулевыми объектами используйте 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
}