Today I was facing some weird nullpointer exceptions (NPEs) in my Android App (Beta phase, luckily). Usually I catch exceptions like
try{ .. }catch(SomeException e){ logger.info("A SomeException occured, but i got it.", e) }
Well in this part of the code I broke with my habit and wrote:
try{ .. }catch(SomeException e){ logger.info("A SomeException occured, but i got it: "+e.getMessage(), e) }
And guess what. I experienced the expected exception, caught it (great) – and got a NPE somewhere in the Loggin framework. WTF?
After having a quick look at the Throwable API, I realized that getMessage()
can indeed return null
. And String+null
produces null
. So I nulled my logging message and passed this null reference right into the logging call – which produced the NPE in there. This was very annoying as I successfully caught the first exception – just to produce a susbsequent error during handling the first one.
Well, I immediately grepped my whole project for any strings like .getMessage()
and checked for any other NPE traps.
Lesson learned today: carefully check the Api docs and be even more paranoid for NPEs.
Yet one question remains unanswered: Why on earth would one like to return null references in exceptions instead of empty strings?!