使用ConnectionFactory并从url中检索数据

时间:2012-01-14 14:59:47

标签: blackberry

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相同。

由于

1 个答案:

答案 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