Android 在设备上保存css以在脱机模式下加载
我的应用程序中有很多网络视图,希望将它们缓存在设备上。现在,我将内容保存为SQLite数据库中的字符串,如果没有Internet连接,我将从那里加载文本。但是如果有人清理了设备上的缓存,图片和css就不再存在了 是否有一种简单的方法来缓存页面上链接的所有图片和css 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
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连接,缓存中没有数据”