Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách lưu cơ sở dữ liệu vào bộ nhớ cục bộ của Android WebView

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ật setDomStorageEnabled(true) và setAppCacheEnabled(true) là bắt buộc để WebView có thể lưu trữ localStorage, sessionStorage và IndexedDB của trang web.