Прежде всего, эта строка:
add(new RichTextField("Deleted and created", Field.NON_FOCUSABLE));
Заставляет меня думать, что вы делаете это прямо в цепочке событий, что является плохой практикой. Если время соединения истекает или занимает много времени, то вы замораживаете графический интерфейс на это время. Обычно вы создаете рабочий поток для выполнения таких длинных задач.
Тем не менее, ваш код может работать, но он не очень надежен. Многое может пойти плохо. Например, эта строка:
HttpConnection connection = (HttpConnection) Connector.open("http://127.0.0.1/xml/home.xml");
Возвращенное соединение может быть пустым, поэтому вы должны проверить его. Вместо этого лучше использовать ConnectionFactory
, так как он добавляет правильный суффикс для каждого типа соединения (WiFi, BES, TCP, ...). В симуляторе я не уверен, что вы можете использовать локальный URL-адрес, поскольку он является локальным для вашей рабочей станции, но моделируемое устройство BB должно пройти симулятор MDS.
С FileConnection
вы также должны проверить, что оно не равно нулю, а также что fconn.canRead
возвращает true. Имейте в виду, что не на каждом устройстве есть слот для SD-карт (в большинстве последних). Вы можете проверить, доступна ли карта, как описано в этой статье , или разрешить catch
обработать исключение. Если вы тестируете на симуляторе, вам придется «смонтировать» виртуальную SD-карту.
Также этот звонок:
ds.read(data);
будет блокироваться до тех пор, пока сервер фактически не отправит вам что-то. Это, вероятно, то, что происходит.
Вы должны убедиться, что у вас есть правильные разрешения. Для подключения к файлу вам понадобится:
ApplicationPermissions.PERMISSION_FILE_API
А для сетевого подключения, в зависимости от того, куда вы подключаетесь, вам понадобится одно из:
ApplicationPermissions.PERMISSION_INTERNET
ApplicationPermissions.PERMISSION_SERVER_NETWORK
Последний совет: добавьте предложение finally к try-catch и закройте все потоки и соединения в finally (если они не равны нулю).