2009-05-05 83 views
1

我有一個HTTP連接,通過如果沒有可用的連接,黑莓HTTP請求會立即出錯嗎?

HttpConnection c = (HttpConnection)Connector.open(url); 

其中url打開是下列之一:

  • http://foo.bar;deviceside=false
  • http://foo.bar;deviceside=false;ConnectionType=mds-public
  • http://foo.bar;deviceside=true;ConnectionUID=xxxxxxx
  • http://foo.bar;deviceside=true;interface=wifi

如果由於設備未連接到網絡而導致無法建立連接,是否有任何方法可以立即導致請求錯誤?實際情況是,在很多情況下(特別是第一次撥打電話以獲取網絡信息:c.getResponseCode())需要大約一分鐘的時間。

編輯:我的意思是出錯。在一種情況下,Wifi,具體來說,如果在超時前WiFi沒有打開,它將靜止幾分鐘,我希望它立即停止。

+0

什麼是「超時立即」是什麼意思?超時 - 顧名思義 - 需要一些時間。你的意思是「得到一個錯誤」? – 2009-05-05 15:06:45

回答

6

我使用RadioInfo類來檢查是否有連接,以及在嘗試建立連接之前是否打開無線電。然後,您可以在嘗試連接之前向用戶顯示一條消息或打開收音機(如果它關閉),則可以獲得更好的用戶體驗。

嘗試使用:

if (RadioInfo.getState() == RadioInfo.STATE_OFF) 
OR 
if (RadioInfo.getSignalLevel() == RadioInfo.LEVEL_NO_COVERAGE) 

要在連接前檢查連接狀態。

0

不能以編程方式指定任何方式。它可能會讓人惱火,但來自移動設備(尤其是黑莓)的連接通常會在到達目標服務器之前通過幾個不同的網絡和網關:wireless-> Carrier APN-> Internet-> BES(也許) - > foo。酒吧服務器,所以內置一個很大的超時時間來解決任何這些點的潛在延遲。

您可以通過BES/MDS服務器(或在JDE中,從MDS \ config \ rimpublic.property文件中)控制默認的設備連接超時 - 但這可能不會對您有所幫助。

0

從不同線程進行超時檢查會更好,因爲即使建立連接時也會發生這種情況,比如說網絡延遲非常高,所以您不希望用戶等待這麼久或者這樣的事情。

所以,在這種情況下,有從不同的線程的支票,用於發起連接進入當前時間減去時間是否比你設定的時間更多,關閉使用連接的Connection.close()!

1

我在一個線程中加入我的帖子以加快超時。確保您的「PostThread」捕獲所有異常(並保存)。

public byte[] post(String url, byte[] requestString){ 
    PostThread thread=new PostThread(url, requestString); 

    synchronized(thread){ 
     try{ 
      thread.start(); 
      thread.wait(TIMEOUT); 
     }catch(Throwable e){ 

     }//method 
    }//synch 

    if (thread.isAlive()){ 
     try{ 
      thread.interrupt(); 
     }catch(Throwable e){ 

     }//method 
     D.error("Timeout"); 
    }//endif 

    if (thread.error!=null) D.error(thread.error); 
    if (thread.output!=null) return thread.output; 
    throw D.error("No output"); 
}//method 

也有ConnectionTimeout參數,這是我沒有測試:如socket://server:80/mywebservice;ConnectionTimeout=2000