3

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

编辑1:

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

4

2 回答 2

3

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

首选方法是将页面下载到Internal Storage(/<data/data/<application_package_name>)(默认情况下,在非 root 设备上对您的应用程序是私有的)或External Storage(public access)。然后在用户设备没有互联网连接时从该存储区域引用页面 ( offline mode)。

更新:1

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

例如:

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

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

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

更新:2下载网页内容

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";
}

// 现在你已经在 result 变量上加载了整个 HTML

因此,使用我的更新 1 代码在文件中写入结果变量。简单的.. :-)

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

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>
于 2012-07-05T05:57:45.793 回答
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();
    }
}
于 2012-07-05T06:28:35.683 回答