There are lots of options and no right answer; check out the summary at the bottom.
It depends on what you are trying to do. Most applications these days involve a number of different components, with code written in a variety of languages and running in a number of different locations. Different programming languages are better suited to different tasks and to different locations of execution. For example, a best-in-class app will typically have code that runs in a datacenter somewhere (i.e. in the "cloud"), code that runs on the user's favorite mobile OS, and code that runs in the user's browser. This is illustrated by the diagram below, where code running on Android, on iOS, and in Chrome communicate with code that is running on the Google Cloud Platform.
The code in the datacenter typically provides logic that is shared between devices/OSes, saves user data so that the user can retrieve and modify their data regardless of which computer they use, performs complex computations or precomputations that would take too long on the user's device, and sends push notifications to users when the application on the device needs to display new information. The code running on the mobile device provides the user interface in a way that fits into the platform and takes advantage of device- or OS-specific capabilities. Code running in the user's browser provides the user interface on the web for desktop, for users who have not installed the mobile apps, or for low-end devices or mobile OSes for which an OS-specific mobile app is unavailable.
To summarize everything above and also insert my personal opinion so as to help you choose:
- Android: choose Java (or C++ if necessary)
- iOS: choose Objective-C (or Swift)
- Server-side: choose Python for rapid iteration, Java for large/stable projects