如何通过HttpConnection将图像保存到黑莓设备?

问题描述:

我的脚本通过httpConnection获取xml并保存到持久存储。那里没有问题。 然后我遍历保存的数据来组成一个图像url的列表通过队列获取。如何通过HttpConnection将图像保存到黑莓设备?

每个请求调用HttpConnection的线程作为这样

...

public synchronized void run() 
{ 
     HttpConnection connection = (HttpConnection)Connector.open("http://www.somedomain.com/image1.jpg"); 
     connection.setRequestMethod("GET"); 
     String contentType = connection.getHeaderField("Content-type"); 

     InputStream responseData = connection.openInputStream(); 
     connection.close(); 

     outputFinal(responseData, contentType); 
} 

public synchronized void outputFinal(InputStream result, String contentType) throws SAXException, ParserConfigurationException, IOException 
{ 

    if(contentType.startsWith("text/")) 
    { 
     // bunch of xml save code that works fine 

    } 
    else if(contentType.equals("image/png") || contentType.equals("image/jpeg") || contentType.equals("image/gif")) 
    { 
    // how to save images here? 
    } 
    else 
    { 
    //default 
    } 
} 

我无法找到任何良好的文档是怎么一会采取响应数据并将其保存到存储在设备上的图像。

也许我只是忽略了一些非常明显的东西。任何帮助非常感谢。 感谢


我试着跟随此提醒,发现同样的事情仰视BB具体的问题时,我总是觉得:没什么。

问题是,每个示例或帖子都假定您知道有关该平台的所有信息。 下面是一个简单的问题:哪一行代码将读取输出流写入黑莓设备?什么路径?如何在以后检索它?

我有这样的代码,我不知道,如果它没有做任何事情,因为我不知道它是理应写入或者如果这是即使它是做什么的都:

**文件名确定在一个基于url的循环上调用。

FileOutputStream fos = null; 
try 
{ 
    fos = new FileOutputStream(File.FILESYSTEM_PATRIOT, filename); 

    byte [] buffer = new byte [262144]; 
    int byteRead; 
    while ((byteRead = result.read (buffer))!=- 1) 
    { 
     fos.write (buffer, 0, byteRead); 
    } 

    fos.flush(); 
    fos.close(); 
} 
catch(IOException ieo) 
{ 
} 
finally 
{ 
    if(fos != null) 
    { 
     fos.close(); 
    } 
} 

这个想法是,我从服务器拉出大约600张图像。我需要循环xml并将每个图像保存到设备中,以便在调用实体时,可以从内部存储中抽取关联的图像 - entity_id.png。

来自RIM的文档没有具体说明这一点,也没有让它很容易开始搞清楚。 这个问题似乎没有解决在这个论坛上,或其他人我搜查。

谢谢

+0

顺便说一句,作为答案下面的附加信息。我不知道为什么SO限制评论的内容。在许多情况下,它是有限的。 – Kai 2010-04-26 23:21:23

您需要使用Java FileOutputStream来完成写入。在从InputStream中读取数据(将呼叫上方的outputFinal移动到关闭状态)后,您还需要关闭连接。您可以轻松找到有关FileOutputStream的各种示例。

查看here了解更多。请注意,为了使用FileOutputStream,您的应用程序必须进行签名。