从黑莓中的searchfield传递参数

时间:2011-06-24 04:40:26

标签: blackberry

我是Blackberry Development的新手,我必须实现搜索功能。它应该像我在搜索字段中输入内容并按下搜索按钮时应该将该字符串作为参数传递给url。任何人都可以把我放在正确的方向,以便我能理解如何实现它。

1 个答案:

答案 0 :(得分:2)

如果您希望在远程服务器上进行搜索,并且只希望用户能够输入搜索字词,那么您首先需要一个包含两个字段的管理器,例如BasicEditFieldButtonField。然后你会想要连接按钮字段以在点击它时提交请求(我假设你的描述是http,但它可以是任何东西)。如果您的按钮字段存储在buttonField变量中,并且您的编辑字段存储在editField变量中,并且您有一个名为sendRequest的方法,该方法接受参数并发送请求网址,然后你可能有:

buttonField.setChangeListener(new FieldChangeListener() {
    public void fieldChanged (Field field, int context) {
        (new Thread() {
            public void run() {
                sendRequest(editField.getText());
            }
        }).start();
    }
});

这可能看起来有点复杂,但很容易崩溃:

  • 通过调用setChangeListener,我们确保只要按下按钮就会调用fieldChanged方法
  • 调用fieldChanged时,我们将在UI线程中。我们不希望在发出请求时锁定UI,因此您应该在新线程中发送请求。
  • getText获取用户输入的当前文字,并将其传递给您的sendRequest方法

sendRequest方法应该将请求发送到您提到的网址。这取决于您需要支持的旧设备 - BlackBerry在5.0中引入了a new networking API并在6.0中进行了扩展,这大大简化了网络通信。

我假设您将解析某种包含搜索结果的响应。在这种情况下,您还需要一位经理(例如VerticalFieldManager)来存储这些结果。然后,您将为要显示的每个结果添加一个字段。但是,在执行此操作时,您需要小心保持the UI event lock,因为它可能会在后台线程中执行。例如,您可能有:

public void addResult(String result) {
    synchronized(Application.getEventLock()) {
        searchResults.add(new LabelField(result));
    }
}

这只会在标签字段中显示结果,但如果您想要更复杂的行为或更复杂的UI,您显然可以拥有更复杂的字段。