http://www.tutorialspoint.com/tutorialslibrary.htm this is the place from where I used to learn Java, however there aren't any challenges, and I had some experience with C before I used to learn Java. If you don't have any perior experience with programming I would recommend you Head First Java. However you said you want to learn Android, after learning the basics of the language, learn algorithms and design patterns, java is perfect language for learning those two and belive me you will need it. To add that android is complex system, you will need to learn a lot of things about it, before start programming.
Codingbat is great for quick java problems and practicing your problem solving abilities. For learning Android specifically, I highly recommended checking out Treehouse (team treehouse.com). Their UI is great and the app is awesome. Also, YouTube is your friend.