Chia sẻ database giữa các ứng dụng trong android

Chia sẻ database giữa các ứng dụng trong android

chia-se-database-giua-nhung-ung-dung-trong-android-1
Hướng dẫn Android

Chia sẻ database giữa các ứng dụng trong android

Bài viết chia sẻ database giữa các ứng dụng trong android sẽ hướng dẫn các bạn làm thế nào để sử dụng chung một database giữa các ứng dụng Android được cài đặt trên cùng một thiết bị.

Như các bạn đã biết, SQLite là một hệ quản trị cơ sở dữ liệu dành cho thiết bị di động và Android là một trong những nền tảng hỗ trợ SQLite.

Việc chúng ta xây dựng một ứng dụng có database thì database đó chỉ tồn tại bên trong một ứng dụng.

Điều đó có nghĩa là chỉ có ứng dụng đó mới được phép truy cập database mà nó tạo ra. Và database này sẽ bị xoá nếu ứng dụng đó bị gỡ bỏ khỏi thiết bị.

Có những trường hợp chúng ta muốn một database được tạo ra bởi một ứng dụng và được chia sẻ để những ứng dụng khác sử dụng. Đó giải quyết vấn đề này, Android cung cấp Content Provider.

Chia sẻ database giữa các ứng dụng trong android – Giới thiệu Content Provider

Content Provier có thể hiểu là một cơ sở dữ liệu mà ở đó dữ liệu được chia sẻ giữa các ứng dụng trong cùng một thiết bị.

Hình bên dưới mô tả trong cùng một thiết bị có 3 ứng dụng là App 1, App 2 và App 3. Trong đó database được tạo ở App 1 và được chia sẻ sử dụng Content Provider để App 2, App 3 có thể sử dụng.

chia-se-database-giua-nhung-ung-dung-trong-android-1

Content URI

Để sử dụng một content provider, bạn phải chỉ định một chuỗi gọi là content URI và có định dạng như sau:

<prefix>://<authority>/<data_type>/<id>

Bảng bên dưới trình bày chi tiết từng phần của content URI

prefixLuôn luôn là content
authorityChỉ định tên của content provider
data_typeXác định kiểu dữ liệu
 idXác định bản ghi được yêu cầu

Một số ví dụ về content URI

Content URI dùng để truy vấn hộp thư đến SMS

content://sms/inbox

Content URI dùng để truy vấn tin nhắn có mã bằng 5 của hộp thư đến SMS

content://sms/inbox/5

Content URI dùng để truy vấn những tin nhắn đã được gửi

content://sms/sent

Content URI dùng để truy vấn những tin nhắn chưa được gửi

content://sms/draft

Chia sẻ database các những ứng dụng trong android – Các bước thực hiện

Tóm tắt

Tạo một ứng dụng tên PlatformManagement sử dụng một database tên platform.db. Trong ứng dụng này cho phép người dùng nhập tên các hệ điều hành dành cho thiết bị di động như Andoid, iOS, Windows Phone và lưu vào platform.db.

Tạo một ứng dụng khác tên MobileOS dùng để hiển thị danh sách hệ điều hành mà ứng dụng PlatformManagement đã tạo.

chia-se-database-giua-nhung-ung-dung-trong-android-2

Các bước thực hiện

Bước 1: Tạo một project tên PlatformManagement

Mở Android Studio -> New -> New Project -> nhập Application name là PlatformManagement, chỉ định thư mục chứa source code tại Project location -> New -> chọn “Phone and Tablet”, Minimum SDK phù hợp -> Next -> chọn “Empty Activity” -> Next -> Finish

1. Tạo một Java class và đặt tên DBHandling

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * Created by http://giasutinhoc.vn
 */
public class DBHandling extends SQLiteOpenHelper {
    private final String TABLE_PLATFORM = "tbl_platform";
    public DBHandling(Context c) {
        super(c, "platform.db", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = " CREATE TABLE " + TABLE_PLATFORM
                + " (id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + " name TEXT NOT NULL);";
        db.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

2. Tạo Java class và đặt tên PlatformProvider

Bạn đọc tải code đầy đủ của PlatformProvider.java

3. Mở app/res/layout/activity_main.xml vàthêm 1 EditText, 2 Button

chia-se-database-giua-nhung-ung-dung-trong-android-3

4. Mở app/java/core.android/MainActivity.java và bổ sung đoạn code được tô màu đỏ (Trong đó core.android là tên package)

import android.content.ContentValues;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    // Xử lý cho nút "Thêm"
    public void addPlatform(View view) {
        ContentValues cv = new ContentValues();
        cv.put(PlatformProvider.name, ((EditText) findViewById(R.id.tvName)).getText().toString());
        Uri uri = getContentResolver().insert(PlatformProvider.CONTENT_URI, cv);
        Toast.makeText(this, "Thêm thành công!", Toast.LENGTH_SHORT).show();
    }
   // Xử lý cho nút "Thoát"
   public void exit(View v) {
       finish();
   }
}

5. Mở app/manifests/AndroidManifest.xml và khai báo provider trước thẻ đóng </application>

<provider
    android:name=".PlatformProvider"
    android:authorities="core.android.PlatformProvider"
    android:exported="true"
    android:multiprocess="true" >
</provider>

6. Build và run ứng dụng; thêm 2 nền tảng là Android và iOS

chia-se-database-giua-nhung-ung-dung-trong-android-4

Bước 2: Tạo một project khác tên MobileOS

1. Mở app/res/layout/activity_main.xml vàthêm 1 Button, 1 TextView

chia-se-database-giua-nhung-ung-dung-trong-android-5

2. Mở app/java/core.android/MainActivity.java và bổ sung đoạn code được tô màu đỏ (Trong đó core.android là tên package)

import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity
        implements LoaderManager.LoaderCallbacks<Cursor> {
    TextView tvResult;
    CursorLoader cl;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvResult= (TextView) findViewById(R.id.result);
    }
    // Xử lý cho nút "Hiển thị"
    public void display(View view) {
        getSupportLoaderManager().initLoader(1, null, this);
    }
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        cl = new CursorLoader(this,
                Uri.parse("content://core.android.PlatformProvider/pf"),
                null, null, null, null);
        return cursorLoader;
    }
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        data.moveToFirst();
        StringBuilder sb = new StringBuilder();
        while (!data.isAfterLast()) {
            sb.append("\n" + data.getString(data.getColumnIndex("id")) + "-" + data.getString(data.getColumnIndex("name")));
            data.moveToNext();
        }
        resultView.setText(sb);
    }
    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
    }
}

3. Build và run ứng dụng

chia-se-database-giua-nhung-ung-dung-trong-android-6
Alert: You are not allowed to copy content or view source !!