Saya memiliki WebView di salah satu Aktivitas saya, dan saat memuat halaman web, halaman tersebut mengumpulkan beberapa data latar belakang dari Facebook.
Apa yang saya lihat, adalah halaman yang ditampilkan dalam aplikasi sama setiap kali aplikasi dibuka dan disegarkan.
Saya sudah mencoba mengatur WebView agar tidak menggunakan cache dan menghapus cache dan riwayat WebView.
Saya juga mengikuti saran di sini: Bagaimana cara mengosongkan cache untuk WebView?
Tetapi tidak ada yang berhasil, apakah ada yang punya ide tentang saya dapat mengatasi masalah ini karena ini adalah bagian penting dari aplikasi saya.
mWebView.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
if(progress >= 100)
{
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
}
else
{
mProgressBar.setVisibility(ProgressBar.VISIBLE);
}
}
});
mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler));
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.clearHistory();
mWebView.clearFormData();
mWebView.clearCache(true);
WebSettings webSettings = mWebView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
Time time = new Time();
time.setToNow();
mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S"));
Jadi saya menerapkan saran pertama (Meskipun mengubah kode menjadi rekursif)
private void clearApplicationCache() {
File dir = getCacheDir();
if (dir != null && dir.isDirectory()) {
try {
ArrayList<File> stack = new ArrayList<File>();
// Initialise the list
File[] children = dir.listFiles();
for (File child : children) {
stack.add(child);
}
while (stack.size() > 0) {
Log.v(TAG, LOG_START + "Clearing the stack - " + stack.size());
File f = stack.get(stack.size() - 1);
if (f.isDirectory() == true) {
boolean empty = f.delete();
if (empty == false) {
File[] files = f.listFiles();
if (files.length != 0) {
for (File tmp : files) {
stack.add(tmp);
}
}
} else {
stack.remove(stack.size() - 1);
}
} else {
f.delete();
stack.remove(stack.size() - 1);
}
}
} catch (Exception e) {
Log.e(TAG, LOG_START + "Failed to clean the cache");
}
}
}
Namun ini masih belum mengubah apa yang ditampilkan halaman. Di browser desktop saya, saya mendapatkan kode html yang berbeda ke halaman web yang dihasilkan di WebView jadi saya tahu WebView harus di-cache di suatu tempat.
Pada saluran IRC saya diarahkan ke perbaikan untuk menghapus cache dari Koneksi URL tetapi belum dapat melihat bagaimana menerapkannya ke WebView.
http://www.androidsnippets.org/snippets/45/
Jika saya menghapus aplikasi saya dan menginstalnya kembali, saya bisa mendapatkan kembali halaman web tersebut, yaitu versi non-cache. Masalah utamanya adalah perubahan dilakukan pada tautan di halaman web, jadi bagian depan halaman web sama sekali tidak berubah.
mWebView.getSettings().setAppCacheEnabled(false);
tidak berhasil?Jawaban:
Potongan kode yang telah diedit di atas yang diposting oleh Gaunt Face berisi kesalahan bahwa jika direktori gagal dihapus karena salah satu filenya tidak dapat dihapus, kode akan terus mencoba kembali dalam putaran tak terbatas. Saya menulis ulang menjadi benar-benar rekursif, dan menambahkan parameter numDays sehingga Anda dapat mengontrol berapa lama file yang harus dipangkas:
Semoga bermanfaat bagi orang lain :)
sumber
Saya menemukan solusi yang elegan dan sederhana untuk membersihkan cache
http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29
Saya telah mencoba mencari cara untuk menghapus cache, tetapi yang dapat kami lakukan dari metode yang disebutkan di atas hanyalah menghapus file lokal, tetapi tidak pernah membersihkan RAM.
API clearCache, membebaskan RAM yang digunakan oleh tampilan web dan karenanya mengamanatkan agar halaman web dimuat lagi.
sumber
Saya menemukan perbaikan yang Anda cari:
Untuk beberapa alasan Android membuat cache url yang buruk yang terus muncul secara tidak sengaja alih-alih data baru yang Anda butuhkan. Tentu, Anda bisa saja menghapus entri dari DB tetapi dalam kasus saya, saya hanya mencoba mengakses satu URL sehingga membuang seluruh DB lebih mudah.
Dan jangan khawatir, DB ini hanya terkait dengan aplikasi Anda sehingga Anda tidak membersihkan cache dari seluruh ponsel.
sumber
Untuk menghapus semua cache tampilan web saat Anda signOUT dari APP Anda:
Untuk Lollipop ke atas:
sumber
Ini harus menghapus cache aplikasi Anda yang seharusnya berada di tempat cache tampilan web Anda berada
sumber
Satu-satunya solusi yang berhasil untuk saya
sumber
Cukup menggunakan kode di bawah ini di Kotlin bekerja untuk saya
sumber
Untuk menghapus cookie dan cache dari Webview,
sumber
Untuk menghapus sejarah, cukup lakukan:
Sumber: http://developer.android.com/reference/android/webkit/WebView.html
sumber
Pastikan Anda menggunakan metode di bawah ini agar data formulir tidak ditampilkan sebagai autopop saat diklik pada bidang masukan.
sumber
sumber
Itu dapat menghapus akun google di tampilan web saya
sumber
use case: daftar item ditampilkan dalam tampilan recycler, setiap kali item diklik menyembunyikan tampilan recycler dan menampilkan tampilan web dengan url item.
Masalah: Saya memiliki masalah serupa di mana setelah saya membuka
url_one
di webview, kemudian mencoba untuk membuka yang lainurl_two
di webview, itu munculurl_one
di latar belakang sampaiurl_two
dimuat.solusi: jadi untuk mengatasi apa yang saya lakukan adalah memuat string kosong
""
sepertiurl
sebelum bersembunyiurl_one
dan memuaturl_two
.output: setiap kali saya memuat url baru di webview, itu tidak menampilkan halaman web lain di latar belakang.
kode
sumber