1

我正在開發一個應用程序,我正在使用瀏覽器字段來加載其中的html文件。我的代碼如下。無法連接到黑莓設備上網?

Main.java

//pushing screen to browser field page.. 

public Main() 
{   
    // Push a screen onto the UI stack for rendering. 
    pushScreen(new WebViewController()); 
} 

WebViewController.java

BrowserFieldConfig bfConfig = new BrowserFieldConfig(); 
    bfConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE, 
      BrowserFieldConfig.NAVIGATION_MODE_POINTER); 
    bfConfig.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED, 
      Boolean.TRUE); 
    bfConfig.setProperty(BrowserFieldConfig.ALLOW_CS_XHR, Boolean.TRUE); 
    bfConfig.setProperty(BrowserFieldConfig.INITIAL_SCALE, new Float(0.0)); 
    bwf = new BrowserField(bfConfig); 
    add(bwf); 

    UiApplication.getUiApplication().invokeLater(new Runnable() { 

     public void run() { 
      // TODO Auto-generated method stub 
      bwf.requestContent("local:///html/index.html");   
     } 
    }, 500, false);  

我所有的服務器代碼& UI設計分別& HTML頁面中的JavaScript從index.html頁面調用...

根據以下代碼,它正在(執行)in模擬器&在運行期間從服務器獲取數據。但是當我在BlackBerry設備上運行時,只有UI設計從index.html頁面加載,但沒有從服務器獲取數據。我不知道錯誤是什麼。 我啓用了JavaScript的黑莓手機也仍然不工作..

因爲我是這個黑莓開發的新手,無法找到與我的應用程序在黑莓設備運行時有什麼問題。

按照下面的代碼,我應該添加任何外部代碼從服務器獲取數據(如剛剛簽署後在黑莓設備上訪問互聯網)

在模擬器,它正在好&獲取數據從服務器。在Blackberry設備上執行時,只有主頁面UI(index.html中的UI)正在加載,但沒有從服務器獲取數據。

誰能幫我這個.....

回答

5

這個問題的提問變化「爲什麼我有對黑莓連接問題」。我會盡力讓你知道如何解決它們。

網絡連接非常複雜,不像j2me,android或iphone連接,你主要要求系統打開TCP/HTTP/UDP連接。 RIM推出了Network Transports。我不確定原因 - 或者他們想給開發人員選擇特定的傳輸方式,或者因爲BES管理員/運營商可能會限制某些連接或其他原因。但是BB開發人員必須指定他希望用於設備上當前連接的傳輸的副作用。默認連接是直接TCP(通過APN運營商設置)的戲劇性的事情。直接TCP在模擬器上完美工作。但是BB設備上最常用的連接是BIS-B和WiFi。此外,BIS-B之前並不適合常規開發人員,他們最近剛剛爲每個人開放了它。

在5.0 OS開發人員有大量的代碼來確定設備上有什麼傳輸可用,並且有傳輸循環嘗試按順序打開。 RIM在5.0操作系統中引入了ConnectionFactory,它提供標準機制來打開確定可用傳輸並打開連接(example)。

你總是必須使用ConnectionFactory你想打開連接。通過ConnectorBrowserField直接到達遠程主機無關緊要。你必須使用ConnectionFactory

戲劇性的是,即使你使用它,你也無法達到BIS-B運輸。正如我之前提到的,它只適用於聯盟成員。 RIM現在不限制任何開發者使用BIS-B。但我不認爲他們也舉了一個例子。爲了讓連接工廠開BIS-B,你需要next line

connFact.setTransportTypeOptions(TransportInfo.TRANSPORT_BIS_B, 
     new BisBOptions("mds-public")); 

這是一個關於黑莓連接的只是小總結。但它應該給你正確的方向來解決你的問題。

+0

我按照答案中提到的示例代碼修改了我的代碼。 MyConnectionFactory _factory = new MyConnectionFactory(); BrowserFieldConfig bfConfig = new BrowserFieldConfig(); bfConfig.setProperty(BrowserFieldConfig.CONNECTION_FACTORY,_factory); BrowserField _bf2 = new BrowserField(bfConfig);添加(_bf2); _bf2.requestContent( 「本地:///html/index.html」);並將MyConnectionFactory.java類添加到我的代碼中。現在它將運行時異常定義爲「由非事件線程調用的PushModal屏幕」。你可以幫我這個... – 2012-08-02 07:22:41

+0

'UiApplication.getUiApplication.invokeLater(new Runnable(){public void run(){.....' - 插入你的屏幕推送代碼在這裏檢查,http:// stackoverflow .com/questions/2525210/pushmodalscreen-called-by-a-non-event-thread-thrown-on-event-thread – Rupak 2012-08-02 07:34:55

+0

感謝@Rupak。但是你看過例子嗎?你設置了允許的傳輸嗎? BIS-B選項? – 2012-08-02 07:44:27