Ответ 1
В уловке используйте:
String err = (ex.getMessage()==null)?"SD Card failed":ex.getMessage();
Log.e("sdcard-err2:",err);
в моем медиаплеере я играю песню с SDCard. он показывает ошибку как NullPointerException: println нуждается в сообщении e в android. я пробовал много времени, но я не знаю, почему. Помогите мне.
код:
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource("/sdcard/t1.mp3");
seek.setMax(mediaPlayer.getDuration());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(this);
}
catch(Exception ex){
Log.e("sdcard-err2:",ex.getMessage()); // null pointer exception : println needs a message
}
Лог кот:
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): Caused by: java.lang.NullPointerException: println needs a message
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): at android.util.Log.println(Native Method)
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): at android.util.Log.e(Log.java:208)
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): at com.seek.bar.media3.onCreate(media3.java:43)
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
05-16 19:27:54.491: ERROR/AndroidRuntime(6889): ... 11 more
В уловке используйте:
String err = (ex.getMessage()==null)?"SD Card failed":ex.getMessage();
Log.e("sdcard-err2:",err);
Для всех, кто получает это, попробуйте заменить вызов одиночного метода или имя переменной на "" + varName.
Например,
Log.d("LOGCAT", getErrorMsg());
становится
Log.d("LOGCAT", "" + getErrorMsg());
Может быть, просто нет прикрепленного сообщения в исключении, которое вы ловите. Попробуйте ex.printStackTrace();
вместо. Надеюсь, это поможет.
Другим способом, который может быть использован, является использование Log.getStackTraceString(e), например:
Log.e(TAG, Log.getStackTraceString(e));
Подробнее об этом можно узнать в Документация для Android.
"println нуждается в megssage" - это очень запутанное сообщение для получения (по крайней мере для меня), когда вообще не используется метод println(...)
!!!
В моем случае и во всех случаях, которые генерируют этот тип ошибок, есть созвездие, за которым вы должны следить:
try{
...
}catch(..){
// in here there is a reference to the Logger
}
Теперь проблема в том, что в вашем блоке try{...}
вы используете неинициализированную ссылку или какой-то старый экземпляр, который теперь указывает на null
Настройте точку останова в самом начале блока try и отлаживайте свой код шаг за шагом, вы обнаружите, что в какой-то момент код попытается получить доступ к методам некоторого объекта, который является нулевым.
В этом случае я склонен обвинять ваш объект seek
!
С уважением.