2012-01-14 80 views
0
public class ConsumeFactoryThread extends Thread { 
    private String url; 

    public ConsumeFactoryThread(String url){ 

     this.url = url; 

    } 


    public void run(){ 

     ConnectionFactory connFact = new ConnectionFactory(); 
     ConnectionDescriptor connDesc; 

     connDesc = connFact.getConnection(url); 

     if(connDesc != null) 
     { 

      HttpConnection httpConn; 
      httpConn = (HttpConnection) connDesc.getConnection(); 

      try 
      { 
       final int iResponseCode = httpConn.getResponseCode(); 
       UiApplication.getUiApplication().invokeLater(new Runnable() 
       { 

        public void run() 
        { 
         //data retrieved 



        } 

       }); 
      } 
      catch(IOException e) 
      { 
       System.err.println("Caught IOException: " + e.getMessage()); 
      } 
     } 

    } 

} 

我得到了上面的代碼從黑莓的文章之一,但我不能完全肯定,我怎麼獲得的URL的內容的原始字符串,這在我案件將是一個JSON字符串。使用ConnectionFactory和檢索URL數據

我知道什麼時候我沒有使用ConnectionFactory我使用了一個inputstream來獲取數據,但我不知道它是否與較新的api相同。

感謝

回答

3

我相信你在找什麼做的是以下幾點:

is = ((Connection) httpConn).openInputStream(); 
byte[] data = net.rim.device.api.io.IOUtilities.streamToBytes(is); 
String result = new String(data); 

這會搶了輸入流的HttpConnection對象已聚集,使用RIM IOUtils類很好地把它放進一個數組然後最終從數據中創建一個String。他們應該可以使用RIM在其SDK中包含的JSON庫來處理JSON。

注意:不知道是否需要轉換,順便提一句,這是未經測試的代碼。

您還應該注意,有3種不同的API可用於在BlackBerry上創建網絡連接。

使用通用連接框架

最古老的基法(下面OS 5)是一種基本J2ME實現與附加到URL的末尾附加的傳輸描述符。它使用J2ME GCF。一個很好的解釋是here,描述瞭如何總是可靠地打開一個HTTPConnection。

使用網絡API

在OS 5和上面介紹。這是您正在使用的當前方法。它封裝了通過使用ConnectionFactory和ConnectionDescriptor類添加到GCF中的URL末尾的討厭的描述符字符串。

使用通訊API

引種到OS 6及以上。這是最新的可能的方法,它是Network API上更高的抽象。這些API抽象瞭如何收集實際數據,並盡力避免使用協議的細節。關於這個API的有用之處是你只需要得到結果數據,而不必擔心實現細節。

您應該注意,當您使用JSON時,它甚至會包含轉換結果數據的細節並將其轉換爲您想要的格式。示例here