Если вы хотите, чтобы поиск выполнялся на удаленном сервере, и просто хотите, чтобы пользователь мог вводить поисковый запрос, то сначала вам понадобится менеджер с двумя полями, например BasicEditField и ButtonField . Затем вы захотите подключить поле кнопки для отправки запроса при нажатии (я полагаю из вашего описания, что это http, но это может быть что угодно). Если поле вашей кнопки хранится в переменной buttonField
, а поле редактирования хранится в переменной editField
, и у вас есть метод с именем sendRequest
, который принимает параметр и отправляет запрос на URL, тогда вы можете есть:
buttonField.setChangeListener(new FieldChangeListener() {
public void fieldChanged (Field field, int context) {
(new Thread() {
public void run() {
sendRequest(editField.getText());
}
}).start();
}
});
Это может показаться немного сложным, но разбить его довольно легко:
- Вызывая setChangeListener, мы гарантируем, что метод fieldChanged будет вызываться при каждом нажатии кнопки
- Когда вызывается
fieldChanged
, мы будем в потоке пользовательского интерфейса. Мы не хотим блокировать пользовательский интерфейс во время выполнения запроса, поэтому вы должны отправить запрос в новом потоке.
getText
получает текущий введенный пользователем текст и передает его вашему sendRequest
методу
Метод sendRequest
должен отправить запрос по указанному вами URL. Это будет зависеть от того, сколько старых устройств вам нужно поддерживать - BlackBerry представила новый сетевой API в 5.0 и расширила его до 6.0, что значительно упрощает сетевые коммуникации.
Я предполагаю, что вы будете анализировать какой-то ответ, содержащий результаты поиска. В этом случае вам также понадобится менеджер (например, VerticalFieldManager ) для хранения этих результатов. Затем вы добавляете поле для каждого результата, который хотите показать. При этом вам нужно быть осторожным, чтобы удерживать блокировку события пользовательского интерфейса , поскольку это, вероятно, будет выполняться в фоновом потоке. Например, вы можете иметь:
public void addResult(String result) {
synchronized(Application.getEventLock()) {
searchResults.add(new LabelField(result));
}
}
Это просто покажет результаты в поле метки, но вы, очевидно, можете иметь более сложные поля, если вы хотите более сложное поведение или более сложный интерфейс.