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());
}
}
}
}
我从Blackberry的一篇文章中得到了上面的代码,但是我不完全确定如何获取url内容的原始String,在我的例子中它将是一个json字符串。
我知道当我没有使用ConnectionFactory时,我使用了输入流来获取数据,但我不知道它是否与更新的api相同。
由于
答案 0 :(得分: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上创建网络连接。
使用通用连接框架
最早的methed(下面的OS 5)是一个基本的J2ME实现,其附加的传输描述符附加到URL的末尾。它使用J2ME GCF。给出了一个很好的解释here,描述了如何始终可靠地打开HTTPConnection。
使用网络API
在OS 5及以上版本中引入。这是您正在使用的当前方法。它包含了令人讨厌的描述符字符串,它通过使用ConnectionFactory和ConnectionDescriptor类添加到GCF中URL的末尾。
使用Communications API
引入OS 6及以上。这是最新的可能方法,它是Network API上更高的抽象。这些API的摘要是如何收集实际数据的,并试图不打扰协议的细节。关于这个API的有用之处在于您只需获得结果数据,而不必担心实现细节。
您应该注意,当您使用JSON时,它甚至会包含转换结果数据并将其转换为您想要的格式的详细信息。示例显示为here。