It seems like the phone you are using does not have any game action associated with key ‘0’. This is quite normal.
If you want to know what key was pressed, you don’t need to use getGameAction - the value of parameter keyCode is what you need. It will take values like KEY_NUM0. If the key has a label which is a Unicode character, keyCode will be the same as its Unicode number (e.g. KEY_NUM0 is 48, Unicode for ‘0’); if the key is some special key like left-softkey, it will have some non-standard negative key code chosen by the manufacturer.
If you want to know what the key conventionally ‘means’ in a game, use getGameAction. Not all keys mean something in a game, and it’s common that KEY_NUM0 has no game action (so getGameAction returns 0). The mapping between keys and game actions is not always the same on different phones, especially if the phones are like Nokia 3650 with unusual key-pad layouts.
Sometimes two different keys can have the same game meaning, and hence they have the same game action. E.g. usually the ‘up’ key (or moving the joystick up) and KEY_NUM2 both mean UP.
In MIDP 2.0, GameCanvas has a method getKeyStates which returns the states of all the game keys. Since it has to tell about all the keys in one 32-bit integer, it uses one bit per key (1 for pressed, 0 for not pressed). So instead of writing:
if (gameAction == UP)
you write:
if ((keyStates & UP_PRESSED) != 0)
Note that you use the binary-arithmetic ‘&’, not the boolean-logic ‘&&’.