アプリに多数の 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 を使いたくない ;)