Android 在设备上保存css以在脱机模式下加载

Android 在设备上保存css以在脱机模式下加载,android,css,caching,webview,offline,Android,Css,Caching,Webview,Offline,我的应用程序中有很多网络视图,希望将它们缓存在设备上。现在,我将内容保存为SQLite数据库中的字符串,如果没有Internet连接,我将从那里加载文本。但是如果有人清理了设备上的缓存,图片和css就不再存在了 是否有一种简单的方法来缓存页面上链接的所有图片和css css的链接在我缓存的字符串中,因此我必须在保存之前操作此链接?但是怎么做呢?那些照片呢 public class MainActivity extends Activity { public WebView webView

我的应用程序中有很多网络视图,希望将它们缓存在设备上。现在,我将内容保存为SQLite数据库中的字符串,如果没有Internet连接,我将从那里加载文本。但是如果有人清理了设备上的缓存,图片和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();
        }
    }
}
公共类MainActivity扩展活动
{
公共网络视图;
公共活动;
公共语境;
公共字符串htmlData;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
活动=此;
上下文=这个;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=(webView)findviewbyd(R.id.webView);
if(isOnline())
{
新建CacheData()。执行(“”);
}否则
{
WebCacheDataHandler wcdh=新的WebCacheDataHandler(上下文);
wcdh.open();
字符串缓存=wcdh.getContent();
wcdh.close();
加载数据(缓存,“文本/html”、“UTF-8”);
}
}
公共字符串getUrlContent(字符串url)引发IOException
{
URL oracle=新URL(URL);
URLConnection yc=oracle.openConnection();
BufferedReader in=新的BufferedReader(新的InputStreamReader(yc.getInputStream());
字符串输入线;
StringBuilder sb=新的StringBuilder();
而((inputLine=in.readLine())!=null)
{
sb.追加(inputLine+“\n”);
}
使某人返回字符串();
}
公共布尔isOnline()
{
ConnectivityManager cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo netInfo=cm.getActiveNetworkInfo();
如果(netInfo!=null&&netInfo.isConnectedOrConnecting())
{
返回true;
}
返回false;
}
公共类CacheData扩展异步任务
{
@凌驾
受保护的布尔doInBackground(字符串…字符串)
{
尝试
{
htmlData=getUrlContent(“http://www.dumdidum.de/");
}捕获(IOE异常)
{
e、 printStackTrace();
}
返回true;
}
@凌驾
PostExecute上受保护的void(布尔值已修改)
{
加载数据(htmlData,“text/html”,“UTF-8”);
//在数据库中写入数据
WebCacheDataHandler wcdh=新的WebCacheDataHandler(上下文);
wcdh.open();
wcdh.insertCache(htmlData);
wcdh.close();
}
}
}

但我不想使用AppCache/Manifest;)

你能解释一下为什么你想实现自己版本的AppCache而不是使用已经存在的AppCache吗?也许我真的不明白已经存在的方法:我不想使用清单来使用HTML AppCache,因为我不想(也不能;)在Web服务器上操纵某些东西。我想你的意思是这样的:?编辑:它不是一个网络应用程序,我只显示了很多网络视图,因为这足以知道,应用程序中的缓存多久会被清理一次,以及我如何识别它被清理。然后,我可以在脱机模式下正确显示我的页面,如果缓存被清理,我将显示这样的消息:“对不起,脱机模式下没有Internet连接,缓存中没有数据”