0

アプリに多数の webView があり、それらをデバイスにキャッシュしたいと考えています。ここで、コンテンツを文字列として SQLite データベースに保存し、インターネット接続がない場合はそこからテキストを読み込みます。しかし、誰かがデバイスのキャッシュを消去すると、写真と css はもう存在しません。

ページにリンクされている/リンクされているすべての画像とcssをキャッシュする簡単な方法はありますか?

css へのリンクはキャッシュした文字列にあるため、保存する前にこのリンクを操作する必要がありますか? しかし、どのように?そして、写真はどうですか?

public class MainActivity extends Activity
{
    public WebView webView;
    public Activity activity;
    public Context context;
    public String htmlData;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        activity = this;
        context = this;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webview);
        if (isOnline())
        {
            new CacheData().execute("");
        } else
        {
            WebCacheDataHandler wcdh = new WebCacheDataHandler(context);
            wcdh.open();
            String cache = wcdh.getContent();
            wcdh.close();
            webView.loadData(cache, "text/html", "UTF-8");
        }
    }

    public String getUrlContent(String url) throws IOException
    {
        URL oracle = new URL(url);
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
        String inputLine;
        StringBuilder sb = new StringBuilder();
        while ((inputLine = in.readLine()) != null)
        {
            sb.append(inputLine + "\n");
        }
        return sb.toString();
    }

    public boolean isOnline()
    {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting())
        {
            return true;
        }
        return false;
    }

    public class CacheData extends AsyncTask<String, Void, Boolean>
    {
        @Override
        protected Boolean doInBackground(String... string)
        {
            try
            {
                htmlData = getUrlContent("http://www.dumdidum.de/");
            } catch (IOException e)
            {
                e.printStackTrace();
            }
            return true;
        }

        @Override
        protected void onPostExecute(Boolean isModified)
        {
            webView.loadData(htmlData, "text/html", "UTF-8");
            // write data in Database
            WebCacheDataHandler wcdh = new WebCacheDataHandler(context);
            wcdh.open();
            wcdh.insertCache(htmlData);
            wcdh.close();
        }
    }
}

しかし、私は AppCache/Manifest を使いたくない ;)

4

0 に答える 0