Приложение Blackberry зависает и зависает при модификации пользовательского интерфейса - PullRequest
1 голос
/ 05 октября 2009

Я написал приложение Blackberry с Blackberry JDE, работающим на симуляторе 9000. Я протестировал его неделю назад или около того и загрузил на телефон Blackberry 9000, и все работало просто отлично. Однако между тем и сейчас что-то пошло не так.

Мой код выполняет всю движущуюся стрелку «загрузка данных из Интернета» или что-то еще, но не появляется никаких экранов. Мой оригинальный экран, который является просто MainScreen с RichTextField, не загружается вообще. По крайней мере, этот экран, по крайней мере, не изменился за прошедшую неделю, поэтому, если что-то сломалось, это будет на одном из более поздних экранов / строк кода, к которому он даже не должен добраться!

Возможно ли, что мой файл .jad или .cod как-то поврежден? Я заметил, что когда я впервые поместил код на мою машину, я просто застрял в файле .cod, который предоставил мне Eclipse. Затем, на прошлой неделе, файл .cod, который он мне дал, не работал, потому что на самом деле это был zip-файл с двумя файлами .cod внутри. Используя файл .cod с тем же именем, что и файл .cod, они успешно загрузили мое приложение. Я сделал то же самое на этот раз, и я не получаю недопустимые ошибки файла COD или что-то еще, но приложение все еще сломано.

Есть ли какое-то направление, которое я должен искать? Скорее всего, проблема в моем коде, файле cod, телефоне или где-то еще?

-Jenny

Edit: я сузил это до проблемы, возникающей, только если я пытаюсь загрузить определенный экран. Моя проблема заключается в том, что этот экран почти идентичен другому экрану, который работает нормально на реальном устройстве. Оба экрана генерируются из одного и того же метода (который выполняет вызов веб-службы, возвращает XML и анализирует его для заполнения полей экрана). Разница лишь в том, что экран, который ломается, идет по другому URL. Этот URL-адрес работает (как из браузера, так и с имитируемого устройства), поэтому я в растерянности. Кажется, что приложение не падает, (оно все еще работает в фоновом режиме), оно просто не пытается отобразить больше.

Edit:

Хорошо, я вижу некоторые ошибки туннелирования сразу после загрузки приложения (но до того, как я выполню любой из моих сетевых кодов). Когда я выполняю свой сетевой код, он работает просто отлично, если только это не относится к моему разделу «Аренда». Я прокомментировал все призывы к этому и сделал свой пункт меню для Аренда просто сделать заявление для печати. Код ведет себя одинаково (он зависает или отображает белый экран после нажатия кнопки). Все остальные пункты меню работают (включая те, которые вызывают потоки или сетевые методы). А меню аренды успешно выполняется в симуляторе.

            private MenuItem _rentals = new MenuItem("My Rentals", 110,
                    10) {
                public void run() {
                    //if the last thing I did was a rental
                    //just show the screen
                    //else, reload rentals
                    System.out.println("Rentals was selected");
                    displayError("Rentals was pressed");

//                  if(rental){
//                      System.out.println("It's a rental!");
//                      popScreen(getActiveScreen());
//                      pushScreen(_offeringsScreen);
//                  }else{
//                      System.out.println("Getting Rentals from scratch");
//                      RentalsThread _rThread = new RentalsThread();
//                      _rThread.start();                               
//                  }

                }};

Я в полной растерянности: отладчик устройства, кажется, даже не регистрирует меня, выбирающего пункт меню, и ни одна строка кода не выполняется! Это просто замерзает! Я попытаюсь вернуть свой вызов RentalsThread в начале моей программы (которая также зависала), чтобы посмотреть, смогу ли я разобрать проблему с потоком проката (который делает экран проката) и проблему с прокатом пункт меню.

Ответы [ 2 ]

2 голосов
/ 07 октября 2009

Ладно, думаю, я понял это.

1.) Мой код продолжал вести себя одинаково даже после того, как все закомментировал, потому что я не перестраивал файлы .COD (они автоматически перестраиваются, если вы пытаетесь запустить его в симуляторе, но не при генерации почему-то файл .ALX).

2.) Код, который у меня был для генерации экрана проката, добавлял что-то на экран. Очевидно, это все хорошо на симуляторе, но на реальном устройстве требуется, чтобы вы выполняли все графические манипуляции (даже для графики, еще не отображаемой) в потоке событий (я использовал invokeAndWait).

Итак, теперь все работает нормально. Там не было ничего плохого в моей сети (и я не думаю, что это было, потому что мой другой экран сети работает просто отлично). Я до сих пор не знаю, почему я получаю все эти странные туннельные сетевые вещи до того, как я начну, но это, похоже, еще ни на что не влияет.

Смотри также:
Потоки в BlackBerry UI - основы
Модель BlackBerry с резьбой

0 голосов
/ 06 октября 2009

несколько предложений:

  • если у вас есть некоторая фоновая работа с такими ресурсами, как файловый ввод-вывод или работа в сети, приложение может просто зависнуть ... обеспечить обработку ошибок и попытаться отладить приложение с устройства!
  • подписывание кода, проверьте последнее обновление кода для API, который требует подписи. Но так как ошибок нет, это сомнительно.

Для отладки на устройстве запустите Blackberry Device Manager, подключите телефон к usb, в eclipse выберите проект, Контекстное меню -> Отладка как -> Blackberry Device.
См. A50 Как отлаживать и оптимизировать

ОБНОВЛЕНИЕ Я вижу исключение "Сбой туннеля", так что это похоже на проблему с сетевым подключением ...
См. Туннель провалился в Blackberry Bold. почему?
Как настроить полный доступ в Интернет на BlackBerry

ОБНОВЛЕНИЕ Поддержка - приложение перестает отвечать при открытии соединения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...