如何在android的应用程序数据库中保存.HTML页面/文件?

时间:2012-07-05 05:54:17

标签: android html sqlite

我现在正在开发一个作为书籍堆栈的应用程序,用户可以阅读他们选择的书籍,现在我正在做的是,显示我制作的html页面,我的应用程序中的Web视图。 现在这个应用程序只有在用户手机上有全时互联网连接时才有效。 我想要的是当他们第一次打开应用程序时,他们需要互联网连接然后应用程序应该能够下载该页面并将其存储在本地数据库中,以便用户可以在以后无需任何互联网连接即可阅读。 那么有没有办法下载html页面并将其存储在本地数据库中,这样即使用户没有连接到互联网,用户也可以使用该应用程序? 如果需要,我可以在这里发布我的代码。 任何最小的小费或帮助都会非常棒,因为我很久以来就被困在这里:(

编辑1:

所以我从网站上成功下载了HTLM页面,但现在我遇到的问题是,我看不到下载的html的任何图像。什么是适当的解决方案?

2 个答案:

答案 0 :(得分:2)

这里“本地数据库”是什么意思?

首选方式是以内部存储 (/<data/data/<application_package_name>)(默认情况下,非root设备是您的应用程序专用)或外部存储 {下载您的网页{1}}。当用户设备没有互联网连接((public access))时,请参考该存储区域中的页面。

更新:1

要存储这些页面,您可以在Android中使用简单的File读/写操作。

例如:

offline mode

此示例在应用程序的内部存储目录中存储文件 hello_file

更新:2 下载网页内容

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

//现在您已在结果变量上加载了整个HTML

所以在File中写入结果变量,使用我的更新1代码。简单..: - )

不要忘记在Android应用程序的清单文件中添加这两个权限。

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.xxxx.com");
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";

BufferedReader reader = new BufferedReader(
    new InputStreamReader(
      response.getEntity().getContent()
    )
  );

String line = null;
while ((line = reader.readLine()) != null){
  result += line + "\n";
}

答案 1 :(得分:1)

下载网页的代码段。检查代码中的注释。只需提供链接即www.mytestpage.com/story1.htm作为功能的下载链接

    void Download(String downloadlink,int choice)
{
    try {
        String USERAGENT;
        if(choice==0)
        {
            USERAGENT ="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17";
        }
        else
        {
            USERAGENT ="Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; ADR6300 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17";
        }
        URL url = new URL(downloadlink);
        //create the new connection
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //set up some things on the connection
        urlConnection.setRequestProperty("User-Agent", USERAGENT);  //if you are not sure of user agent just set choice=0
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);
        urlConnection.connect();

        //set the path where we want to save the file
        File SDCardRoot = Environment.getExternalStorageDirectory();
        File dir = new File (SDCardRoot.getAbsolutePath() + "/yourfolder");
        if(!dir.exists())
        {
        dir.mkdirs();
        }
        File file = new File(dir, "filename");  //any name abc.html

        //this will be used to write the downloaded data into the file we created
        FileOutputStream fileOutput = new FileOutputStream(file);

        //this will be used in reading the data from the internet
        InputStream inputStream = urlConnection.getInputStream();

        //this is the total size of the file
        int totalSize = urlConnection.getContentLength();
        //variable to store total downloaded bytes
        int downloadedSize = 0;

        //create a buffer...
        byte[] buffer = new byte[1024];
        int bufferLength = 0; //used to store a temporary size of the buffer

        //write the contents to the file
        while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
            fileOutput.write(buffer, 0, bufferLength);
        }
        //close the output stream when done
        fileOutput.close();
        inputStream.close();
        urlConnection.disconnect();

    //catch some possible errors...
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}