Welcome!

Welcome to the official BlackBerry Support Community Forums.

This is your resource to discuss support topics with your peers, and learn from each other.

inside custom component

Java Development

Reply
Developer
alfonsn
Posts: 34
Registered: ‎08-11-2011
My Device: BlackBerry Bold
Accepted Solution

Saving Full HTML Document on SDCard/ External Memory

Hi, I want to save an HTML document complete with all of it resources (images, css, etc.) into the device's external memory so that I can display it later in the BrowserField without having to reconnect to the internet (a sort of web cache, only it's located on the external memory). I tried using the code below to do this but it doesn't seem to save the document's dependent resources such as images, and css. CMIIW.

 

try 
{ StringBuffer raw = null; HttpConnection httpConn = (HttpConnection) Connector.open("http://google.com"); int status = httpConn.getResponseCode(); if (status == HttpConnection.HTTP_OK) { InputStream input = httpConn.openInputStream(); byte[] data = new byte[256]; int len = 0; int size = 0; raw = new StringBuffer(); while (-1 != (len = input.read(data))) { raw.append(new String(data, 0, len)); size += len; } } httpConn.close(); DataOutputStream os = null; FileConnection fconn = null; try { fconn = (FileConnection) Connector.open("file://" + "/SDCard/BlackBerry/" + "google.html", Connector.READ_WRITE); if (fconn.exists()) { fconn.delete(); } if (!fconn.exists()) { fconn.create(); } os = fconn.openDataOutputStream(); os.write(raw.toString().getBytes()); } catch (IOException e) { } finally { try { if (null != os) os.close(); if (null != fconn) fconn.close(); } catch (IOException e) { } } } catch(Exception ex) { }

 

Another solution I am thinking of is adding a BrowserFieldListener on the BrowserField and saving the document when the documentLoaded method in the listener gets called. But I'm not sure how to do this and whether it would even work.

 

I'm quite sure it's possible since the BlackBerry's browser can save web pages for offline viewing. Can someone help me with this?

 

Thanks in advance.

Please use plain text.
Developer
peter_strange
Posts: 19,609
Registered: ‎07-14-2008
My Device: Not Specified

Re: Saving Full HTML Document on SDCard/ External Memory

If you want to save it yourself, you are going to have to parse the HTML and download the component parts (images etc) yourself.  You will also have to change the references so that they refer to the local storage repository rather then the internet URL that the HTML might refer to. 

 

I think the BrowserField hooks will let you save each of the individual components, but you are still left with needing to change the URL in the web page to match where the downloaded files are stored. 

 

This might be challenge to do generically, but if you only going to allow the download of some sites that you maintain, then you simplify the processing using relative URLs and easy to parse HTML so it might not be that much work.

Please use plain text.
Developer
alfonsn
Posts: 34
Registered: ‎08-11-2011
My Device: BlackBerry Bold

Re: Saving Full HTML Document on SDCard/ External Memory

Thanks for your quick reply Peter.

 

I think I'll be able to redirect the web request to the local storage repository by overriding the handleResourceRequest method in ProtocolController interface.

 

But I still don't understand how to parse each component in the web page. And which BrowserField method will let me save these components?

 

Could you possibly give me an example or a link to an article that could explain about this? =)

local storage repository
Please use plain text.
Developer
peter_strange
Posts: 19,609
Registered: ‎07-14-2008
My Device: Not Specified

Re: Saving Full HTML Document on SDCard/ External Memory

On reflection, you might be able to do all of it using handleResourceRequest, but there would two phases:

 

a) In the save phase, you will override this, call super to get the stream, then save the stream to disk

b) In the load phase, you will supply the stream form disk.

 

Try typing just BrowserField in the Search box, there are a number of KB articles that deal with things like this.

Please use plain text.
Trusted Contributor
foufou
Posts: 109
Registered: ‎11-15-2011
My Device: blackberry 9800

Re: Saving Full HTML Document on SDCard/ External Memory

Did you find the solution??

How did you use the handleResourceRequest to get ressources?

Please use plain text.
Developer
peter_strange
Posts: 19,609
Registered: ‎07-14-2008
My Device: Not Specified

Re: Saving Full HTML Document on SDCard/ External Memory

He did exactly what I have been trying to tell you in your other Threads.

 

Please review the API, and look at the sample KB article you are already trying.

 

For other readers, here is one of this posters other threads:

http://supportforums.blackberry.com/t5/Java-Development/TOO-MANY-THREADS-ERROR-EXCEPTION/td-p/209951...

 

Please use plain text.
Trusted Contributor
foufou
Posts: 109
Registered: ‎11-15-2011
My Device: blackberry 9800

Re: Saving Full HTML Document on SDCard/ External Memory

you didn't see my code!!!! I also use the handle ressource but it didn't get all the ressources and it returns incorrect url

Please use plain text.
Developer
peter_strange
Posts: 19,609
Registered: ‎07-14-2008
My Device: Not Specified

Re: Saving Full HTML Document on SDCard/ External Memory

Please use plain text.