3

私は現在、ブックスタックとして機能するアプリに取り組んでいます。このアプリでは、ユーザーが選択した本を読むことができます。現在、私が行っているのは、作成したhtmlページをアプリケーションのWebビューに表示することです。 。現在、このアプリケーションは、ユーザーが自分の電話でフルタイムのインターネット接続を持っている場合にのみ機能します。正確に私が欲しいのは、彼らが最初にアプリケーションを開いたとき、彼らはインターネット接続を必要とし、それからアプリはそのページをダウンロードしてローカルデータベースに保存できるはずです。そうすればユーザーはインターネットに接続しなくても後でそれを読むことができます。 では、ユーザーがインターネットに接続していなくてもアプリを使用できるように、htmlページをダウンロードしてローカルデータベースに保存する方法はありますか? 必要に応じて、ここにコードを投稿できます。私は長い間ここで立ち往生しているので、どんな小さなヒントや助けも本当に素晴らしいでしょう:(

編集1:

だから私はウェブサイトからHTLMページを正常にダウンロードしました、しかし今私が直面している問題は私がダウンロードされたhtmlのどの画像も見ることができないということです。これに対する適切な解決策は何でしょうか?

4

2 に答える 2

3

ここで、「ローカル データベース」とはどういう意味ですか?

推奨される方法は、ページをInternal Storage(/<data/data/<application_package_name>) (ルート化されていないデバイスではデフォルトでアプリケーション専用) または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 Web コンテンツのダウンロード

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

// これで HTML 全体が結果変数にロードされました

したがって、更新 1 コードを使用して、結果変数をファイルに書き込みます。単純.. :-)

これら 2 つの権限を 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

Web ページをダウンロードするためのコード スニペット。コード内のコメントを確認してください。リンク、つまり 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 に答える