Отображение предупреждения с командой «Да, нет»

В приложении J2me я использовал предупреждение с командой «да, нет». Если пользователь щелкнет команду «да», отобразится экран формы, а если щелкнет, отобразится экран текстового поля команды «нет». Но код не работает. Для двух команд будет отображаться только экран текстового поля.

Это мой код:

public Login(){
    yes=new Command("Yes",Command.OK,1);
    no=new Command("No",Command.CANCEL,1);
    alert=new Alert("","Save The Changes?",null,AlertType.CONFIRMATION);
    alert.setTimeout(Alert.FOREVER);
    alert.addCommand(yes);
    alert.addCommand(no);
    textbox.setCommandListener(this);
    alert.setCommanListener(this);
}
public void commandAction(Command command, Displayable displayable) {
    if(displayable==textbox)
    {
        if(command==exit)
        {
            switchDisplayable(null,alert);
        }
    }
    else if(displayable==alert)
    {
        if(command==no)
        {
            switchDisplayable(alert,getForm());
        }
        else if(command==yes)
        {
            switchDisplayable(alert,getTextbox());
        }
    }
}

Где моя вина?


person Tuğba    schedule 17.03.2011    source источник
comment
Это другой класс, который наследует от этого класса. Я упростил свой код и забыл эту строку. И я его редактирую   -  person Tuğba    schedule 18.03.2011


Ответы (1)


Ваша главная ошибка здесь в том, что я не использую соответствующее логирование в своем мидлете. Кроме этого, в опубликованном вами фрагменте кода нет очевидных ошибок.

Скорее всего, ошибка вызвана тем, что что-то пошло не так в вашем коде метода getForm(), но, поскольку логирование отсутствует, вы также должны проверить другие возможности, такие как, например, прослушиватель команд или объект команды no, или объект alert был каким-то образом изменен. где-то еще в вашем коде.

С ведением журнала, как показано в примере ниже, вы можете просто запустить свой мидлет в эмуляторе и проверить сообщения консоли, чтобы узнать, был ли выполнен ожидаемый код или нет:

public void commandAction(Command command, Displayable displayable) {
    Log.log("command: [" + command.getCommandLabel()
            + "] at screen: [" + displayable.getTitle() + "]");
    if(displayable==textbox)
    {
        Log.log("in textbox");
        if(command==exit)
        {
            Log.log("handle exit command");
            switchDisplayable(null,alert);
        }
    }
    else if(displayable==alert)
    {
        Log.log("in alert");
        if(command==no)
        {
            Log.log("handle no command");
            switchDisplayable(alert,getForm());
        }
        else if(command==yes)
        {
            Log.log("handle yes command");
            switchDisplayable(alert,getTextbox());
        }
    }
}
//...


public class Log {
    // utility class to keep logging code in one place
    public static void log (String message) {
        System.out.println(message);
        // when debugging at real device, S.o.p above can be refactored
        //  - based on ideas like one used here (with Form.append):
        //    http://stackoverflow.com/questions/10649974
        //  - Another option would be to write log to RMS
        //    and use dedicated MIDlet to read it from there
        //  - If MIDlet has network connection, an option is
        //    to pass log messages over the network. Etc etc...
    }
}
person gnat    schedule 18.12.2012