2011-04-14 111 views
3

從模擬器打開簡單的HttpConnection時遇到了問題,我已經將deviceside = true後綴添加到了我的url中,但它仍然無法使用,我收到一個空httpconnection與響應代碼0.這是代碼給我的問題:從黑莓模擬器打開http連接時出現問題

public void readUrl(){ 
    HttpConnection conn=null; 
     try { 
      conn = (HttpConnection) Connector.open("http://www.google.com;deviceside=true"); 
      conn.setRequestMethod("GET"); 
      if(conn.getResponseCode()==HttpConnection.HTTP_OK){ 
       System.out.println("Create connection sucessfully"); 
      } 

     } catch (ConnectionNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } 




     DataInputStream din=null; 
     ByteVector responseBytes=null; 
     try { 
      din = conn.openDataInputStream(); 
      responseBytes = new ByteVector(); 
       int i = din.read(); 
       while (-1 != i) { 
       responseBytes.addElement((byte) i); 
       i = din.read(); 
       } 
     } catch (IOException e) { 
      //TODO: HANDLE EXCEPTIONS 
      e.printStackTrace(); 
     } 
     responseBytes.toArray(); 

我不知道發生了什麼事情。它假設通過追加deviceside = true它應該直接連接。無論如何,我試圖安裝MDS服務器,並將我的網址設置爲設備= false,但結果是一樣的。

現在我使用本地URL(如http://localhost:8080/resources/mypage.html)測試了相同的代碼,它按預期工作,所以我想知道這是否可能是模擬器配置問題。我該如何解決它?

非常感謝。

回答

1

你說得對,與裝置側=使用真正的互聯網連接是的,但它似乎是一個問題白衣的HttpConnection類,當我用這個代碼,而不是:

public StreamConnection openConnection(){ 
    StreamConnection conn=null; 
    try { 
     conn = (StreamConnection) Connector.open(url+";deviceside=true"); 
     //conn.setRequestMethod(httpMethod); 

    } catch (ConnectionNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } 

    return conn; 


} 

它工作正常,所以我想知道一些...當在黑莓手機中打開一個連接時,我應該把我的代碼用於檢查響應代碼。創建連接後?像上面的代碼或打開dataStream後:

din = conn.openDataInputStream(); 

     responseBytes = new ByteVector(); 
      int i = din.read(); 
      while (-1 != i) { 
      responseBytes.addElement((byte) i); 
      i = din.read(); 
      } 

謝謝。

3

根據我的經驗,當使用MDS模擬器時,需要追加; deviceside = true。 blackberry.com論壇上有一個非常棒的post,它向你展示瞭如何確定你應該使用的連接後綴,以及關於在BlackBerry中使用連接的一些很好的建議。

對於一些事來幫助更容易地得到您的請求的內容,你可以使用IOUtilities類:

InputStream stream = conn.openInputStream(); 
String contents = new String(IOUtilities.streamToBytes(stream)); 
2

在模擬器設置選項卡「常規」,你有「啓動MDS-CS與模擬器「檢查? 如果是這樣,則根本不需要附加任何後綴...

2

「; deviceside = true」用於DIRECT TCP傳輸。要使用MDS傳輸,您需要附加「; deviceside = false」。

當您在設備模擬器上運行時,您可以使用DIRECT TCP傳輸而無需啓動MDS模擬器。但是,如果要測試MDS傳輸,則需要在啓動設備模擬器之前啓動MDS模擬器。