2013-06-03 115 views
1

我使用下面的代碼得到一個網頁黑莓產生java.io.IOException:空

String url = "http://abc.com/qrticket.asp?qrcode=" 
    + "2554"; 

try { 
    url += ";deviceside=true;interface=wifi;ConnectionTimeout=" + 50000; 
    HttpConnection connection = (HttpConnection) Connector.open(url, 
     Connector.READ_WRITE); 

    connection.setRequestMethod(HttpConnection.GET); 
    // connection.openDataOutputStream(); 

    InputStream is = connection.openDataInputStream(); 

    String res = ""; 
    int chr; 
    while ((chr = is.read()) != -1) { 

     res += (char) chr; 
    } 
    is.close(); 
    connection.close(); 
    showDialog(parseData(res)); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
    showDialog("http: " + ex.getMessage()); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
    showDialog("unknown: " + ex.getMessage()); 
} 



public void showDialog(final String text) { 
    UiApplication.getUiApplication().invokeLater(new Runnable() { 
     public void run() { 
      Dialog.alert(text); 
     } 
    }); 
} 

public String parseData(String str) { 
    String[] data = split(str, "//"); 

    StringBuffer builder = new StringBuffer(); 

    for (int i = 0; i < data.length; i++) { 
     System.out.println("data:" + data[i]); 

     String[] vals = split(data[i], ">>"); 

     if (vals.length > 1) { 
      System.out.println(vals[0]); 
      builder.append(vals[0].trim()).append(": ") 
      .append(vals[1].trim()).append("\n"); 
      } else { 
      builder.delete(0, builder.toString().length()).append(
      vals[0].trim()); 
      break; 
     } 
    } 

    return builder.toString(); 
} 

public String[] split(String splitStr, String delimiter) { 

    // some input validation 
    if (delimiter == null || delimiter.length() == 0) { 
     return new String[] { splitStr }; 
     } else if (splitStr == null) { 
     return new String[0]; 
    } 

    StringBuffer token = new StringBuffer(); 
    Vector tokens = new Vector(); 
    int delimLength = delimiter.length(); 
    int index = 0; 
    for (int i = 0; i < splitStr.length();) { 
     String temp = ""; 
     if (splitStr.length() > index + delimLength) { 
      temp = splitStr.substring(index, index + delimLength); 
      } else { 
      temp = splitStr.substring(index); 
     } 

     if (temp.equals(delimiter)) { 
      index += delimLength; 
      i += delimLength; 
      if (token.length() > 0) { 
       tokens.addElement(token.toString()); 
      } 
      token.setLength(0); 
      continue; 
      } else { 
      token.append(splitStr.charAt(i)); 
     } 
     i++; 
     index++; 

    } 
    // don't forget the "tail"... 
    if (token.length() > 0) { 
     tokens.addElement(token.toString()); 
    } 
    // convert the vector into an array 
    String[] splitArray = new String[tokens.size()]; 
    for (int i = 0; i > splitArray.length; i++) { 
     splitArray[i] = (String) tokens.elementAt(i); 
    } 
    return splitArray; 
} 

這是工作在模擬器精絕的內容,但給人的「http:空」的設備(IOException異常)我不知道爲什麼? 如何解決這個問題? 在此先感謝

+0

你會展示函數showDialog(parseData(res)); – Signare

+0

更新了這個問題,但這些方法沒有問題,我已經通過無需解析數據來檢查@Signare – Talha

+0

resp是html嗎? – Signare

回答

1

問題是沒有激活黑莓互聯網服務。訂閱問題解決後。 特別感謝你們所有人@Nate

+0

好的非常感謝。 – Talha

2

我認爲問題可能是您試圖添加到您的網址的額外連接後綴。

http://abc.com/qrticket.asp?qrcode=2554;deviceside=true;interface=wifi;ConnectionTimeout=50000

this BlackBerry document,該ConnectionTimeout參數不適用於Wifi連接。

另外,我認爲如果你使用的是Wifi,你的後綴應該只是";interface=wifi"

看看這個blog post on making connections on BlackBerry Java, pre OS 5.0。如果你只需要支持OS 5.0+,我會推薦使用ConnectionFactory class

所以,我將與URL試試這個:

http://abc.com/qrticket.asp?qrcode=2554;interface=wifi

注:這我不清楚你額外連接參數是否恰恰忽略了,或者實際上是一個問題。但是,由於您確實在該行上獲得了IOException,我會嘗試刪除它們。

+0

刪除後綴x;接口= wifi後出現錯誤「嘗試訪問安全API「在應用程序啓動時@Nate 我認爲這是權限錯誤,但我部署了簽名應用程序 – Talha

+0

這是一個完全獨立的問題:嘗試訪問安全API僅僅意味着您調用的API需要代碼簽名,但是你還沒有**正確的** cod電子簽署的應用程序。您需要仔細檢查您的簽名密鑰。但是,這與你的IOException無關。 – Nate