Giới thiệu
Bài viết này hướng dẫn cách cấu hình WebView để lưu trữ dữ liệu cơ sở dữ liệu (database) và bộ nhớ đệm (cache) vào bộ nhớ cục bộ của ứng dụng Android. Điều này giúp WebView hoạt động mượt mà hơn và lưu trữ dữ liệu web offline.
Các bước thực hiện
Bước 1: Tạo dự án mới
Trong Android Studio, chọn File → New Project và hoàn tất thiết lập dự án.
Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)
Sử dụng WebView chiếm toàn bộ màn hình:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Bước 3: Cấu hình WebView (src/MainActivity.java)
package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Đang tải dữ liệu...");
progressDialog.setCancelable(false);
WebView webView = findViewById(R.id.web_view);
webView.requestFocus();
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
// Thiết lập đường dẫn cache và database
String appCachePath = getApplicationContext().getFilesDir().getAbsolutePath() + "/cache";
String appDatabasePath = getApplicationContext().getFilesDir().getAbsolutePath() + "/databases";
settings.setAppCachePath(appCachePath);
settings.setDatabasePath(appDatabasePath);
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);
webView.loadUrl("https://touch.facebook.com/");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
if (progress < 100) {
progressDialog.show();
}
if (progress == 100) {
progressDialog.dismiss();
}
}
});
}
}
Bước 4: Khai báo quyền Internet (AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
Kết nối thiết bị, nhấn Run, ứng dụng sẽ mở Facebook phiên bản nhẹ trong WebView với khả năng lưu cache và database cục bộ.
Mẹo: Việc bậtsetDomStorageEnabled(true)vàsetAppCacheEnabled(true)là bắt buộc để WebView có thể lưu trữ localStorage, sessionStorage và IndexedDB của trang web.