Ngân hàng câu hỏi của chương

Câu hỏi: PRM392 - Chương 6: Lưu trữ dữ liệu và Content Provider

36 câu trắc nghiệm kèm lời giải của môn Mobile Programming - Lập trình di động, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/36 câuCòn 16
AThe symbolic name of the provider
BA name that points to a table or file
CAn optional part that points to an individual row in a table
DMetadata defining the synchronization policy for concurrent access
Lời giải
Một URI nội dung (Content URI) thường bao gồm các phần sau: - Tên biểu tượng của nhà cung cấp (The symbolic name of the provider): Đây là tên hoặc biểu tượng của nhà cung cấp dữ liệu, giúp xác định nguồn gốc của dữ liệu. - Tên chỉ đến một bảng hoặc tệp tin (A name that points to a table or file): Đây là phần chỉ đến một bảng hoặc tệp tin cụ thể, giúp xác định dữ liệu cần truy cập. - Một phần tùy chọn chỉ đến một hàng cụ thể trong bảng (An optional part that points to an individual row in a table): Đây là phần tùy chọn chỉ đến một hàng cụ thể trong bảng, giúp xác định dữ liệu cần truy cập. Các phần này thường được sử dụng trong hệ thống quản lý cơ sở dữ liệu để xác định và truy cập dữ liệu.
Mở trang câu hỏi này →
AFilesystem accesses are often relatively slow
BSQLite doesn't support synchronous operations
CSQLite supports the SQL92 specification, which is obsolete
DAndroid filesystems are unreliable due to their use of flash memory
Lời giải
Khi xây dựng ứng dụng Android, việc truy cập cơ sở dữ liệu SQLite thường đòi hỏi sự đồng bộ hóa hoặc bất đồng bộ hóa. Một trong những lý do chính là do các truy cập vào hệ thống tệp thường diễn ra chậm. Điều này là do các hệ thống tệp trên Android thường sử dụng bộ nhớ flash, dẫn đến độ tin cậy thấp hơn so với các hệ thống tệp truyền thống. Việc sử dụng đồng bộ hóa hoặc bất đồng bộ hóa giúp ứng dụng Android có thể tiếp tục hoạt động mà không bị gián đoạn khi truy cập cơ sở dữ liệu. Ngoài ra, việc sử dụng bất đồng bộ hóa còn giúp giảm thiểu thời gian chờ đợi và cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
AShared Preferences
BCursor
CSQlite database
DNot possible
Lời giải
Để lưu trữ dữ liệu có cấu trúc nặng trong Android, chúng ta cần sử dụng cơ sở dữ liệu. Có nhiều lựa chọn khác nhau, nhưng SQLite là lựa chọn phổ biến nhất. SQLite là một cơ sở dữ liệu nhẹ, được tích hợp sẵn trong Android, cho phép lưu trữ và truy xuất dữ liệu một cách hiệu quả. Nó hỗ trợ các tính năng như tạo bảng, thêm, sửa, xóa dữ liệu, v.v. Ngoài ra, SQLite cũng hỗ trợ các loại dữ liệu như số nguyên, chuỗi, ngày giờ, v.v. Vì vậy, SQLite là lựa chọn phù hợp để lưu trữ dữ liệu có cấu trúc nặng trong Android.
Mở trang câu hỏi này →
AShared Preferences
BContent provider
CInternal Storage
DSQLite Databases
Lời giải
Để chia sẻ dữ liệu giữa tất cả các ứng dụng, chúng ta nên sử dụng Content provider. Content provider là một lớp trừu tượng giúp quản lý dữ liệu và cung cấp truy cập cho các ứng dụng khác. Nó cho phép các ứng dụng khác nhau truy cập và sử dụng dữ liệu mà không cần phải lưu trữ dữ liệu đó trong mỗi ứng dụng riêng biệt. Điều này giúp giảm thiểu việc lặp lại mã và tăng cường tính bảo mật của dữ liệu. Ngoài ra, Content provider cũng cung cấp các tính năng như quản lý quyền truy cập và bảo vệ dữ liệu khỏi các ứng dụng không được phép truy cập.
Mở trang câu hỏi này →
ACreates and manages an Android SQLite database for you.
BEliminates a lot of boilerplate code.
CHelps you manage multiple applications.
DUsing a DAO, provides a mechanism for mapping Java methods to database queries.
Lời giải
Câu hỏi này yêu cầu bạn chọn các lợi ích của việc sử dụng Room database. Room database là một thư viện của Android giúp tạo và quản lý cơ sở dữ liệu SQLite một cách dễ dàng. Các lợi ích của Room database bao gồm: Tạo và quản lý cơ sở dữ liệu SQLite cho bạn. Giảm thiểu mã nguồn lặp lại (boilerplate code). Sử dụng DAO (Data Access Object) để ánh xạ các phương thức Java sang các truy vấn cơ sở dữ liệu. Điều này giúp bạn có thể tập trung vào việc phát triển ứng dụng của mình mà không cần phải lo lắng về việc tạo và quản lý cơ sở dữ liệu.
Mở trang câu hỏi này →
Aremove()
Bdelete()
Cclear()
Ddestroy()
Lời giải
Để xóa tất cả dữ liệu trong SharedPreference, chúng ta cần sử dụng phương thức phù hợp. Trong các lựa chọn đã cho, phương thức "clear()" là lựa chọn đúng. Phương thức này được sử dụng để xóa tất cả các giá trị đã lưu trữ trong SharedPreference. Điều này có nghĩa là tất cả các khóa và giá trị sẽ bị xóa khỏi bộ nhớ cache. Phương thức "remove()" chỉ xóa một khóa cụ thể, trong khi "delete()" không phải là phương thức mặc định trong SharedPreference. Phương thức "destroy()" cũng không phải là phương thức chính thức trong SharedPreference. Vì vậy, để xóa tất cả dữ liệu trong SharedPreference, chúng ta nên sử dụng phương thức "clear()".
Mở trang câu hỏi này →
AA fragment has its own layout and its own behaviour with its own life cycle callbacks.
BYou can add or remove fragments in an activity while the activity is running.
CYou can combine multiple fragments in a single activity to build a multi-pane UI.
DAll of the others.
Lời giải
Câu hỏi này yêu cầu bạn chọn đúng thông tin về Room library và Fragments. Room library là một thư viện giúp lưu trữ dữ liệu một cách dễ dàng. Nó cung cấp một lớp trừu tượng để lưu trữ dữ liệu. Về Fragments, chúng là một phần của Android, giúp bạn xây dựng các ứng dụng phức tạp hơn. Fragments có thể có layout và hành vi riêng biệt, và chúng có vòng đời riêng biệt. Ngoài ra, bạn có thể thêm hoặc xóa Fragments trong một hoạt động trong khi hoạt động đang chạy. Cuối cùng, bạn có thể kết hợp nhiều Fragments trong một hoạt động để xây dựng giao diện người dùng đa màn hình.
Mở trang câu hỏi này →
8What are components in Room?4 lựa chọn
AEntity
BDatabaseHelper
CDatabase
DDAO
Lời giải
Trong Room, các thành phần chính bao gồm Entity, Database và DAO. Entity đại diện cho các đối tượng dữ liệu trong cơ sở dữ liệu, Database là lớp quản lý cơ sở dữ liệu, còn DAO (Data Access Object) là lớp cung cấp giao diện truy cập dữ liệu. Entity được sử dụng để mô tả cấu trúc dữ liệu, Database được sử dụng để quản lý cơ sở dữ liệu và DAO được sử dụng để thực hiện các hoạt động truy cập dữ liệu. Việc sử dụng các thành phần này giúp chúng ta có thể dễ dàng quản lý và truy cập dữ liệu trong ứng dụng.
Mở trang câu hỏi này →
Acreate, read, update
Bread, update, delete
Ccreate, read, update, delete
Dread, delete
Lời giải
Khi sử dụng một content provider, các ứng dụng Android có thể thực hiện các hoạt động sau với dữ liệu được lưu trữ trong content provider. Các hoạt động này bao gồm tạo (create), đọc (read), cập nhật (update) và xóa (delete) dữ liệu. Điều này cho phép các ứng dụng khác nhau chia sẻ và sử dụng dữ liệu một cách thống nhất. Ví dụ, một ứng dụng có thể tạo dữ liệu, sau đó một ứng dụng khác có thể đọc và cập nhật dữ liệu đó. Điều này giúp tăng cường tính linh hoạt và khả năng tương tác giữa các ứng dụng khác nhau.
Mở trang câu hỏi này →
ATo synchronize local data with remote data
BTo offer complex data to other apps
CTo notify activities automatically when data changes
DTo enable long-duration operations to execute in the background
Lời giải
Một content provider là một lớp trung gian giúp các ứng dụng chia sẻ dữ liệu với nhau. Sử dụng content provider có nhiều lý do. Thứ nhất, nó giúp đồng bộ hóa dữ liệu cục bộ với dữ liệu từ xa. Điều này cho phép các ứng dụng cập nhật dữ liệu của họ một cách tự động và đồng bộ. Thứ hai, content provider cung cấp dữ liệu phức tạp cho các ứng dụng khác. Điều này cho phép các ứng dụng khác truy cập và sử dụng dữ liệu mà không cần phải lưu trữ dữ liệu đó trong ứng dụng của họ. Thứ ba, content provider có thể tự động thông báo cho các hoạt động khi dữ liệu thay đổi. Điều này giúp các ứng dụng cập nhật dữ liệu của họ một cách tự động và không cần phải kiểm tra dữ liệu thường xuyên.
Mở trang câu hỏi này →
Aquery()
BexecSQL()
CrawQuery()
DdoQuery()
Lời giải
Để trả lời câu hỏi này, chúng ta cần hiểu về các phương thức khác nhau trong SQLite. Phương thức query() thường được sử dụng để thực hiện các truy vấn SQL và trả về kết quả dữ liệu. Phương thức rawQuery() cũng được sử dụng để thực hiện các truy vấn SQL nhưng nó không hỗ trợ các tham số được đặt tên. Phương thức doQuery() không phải là một phương thức thực sự trong SQLite, có thể nó là một phương thức được sử dụng trong một thư viện hoặc framework cụ thể. Phương thức execSQL() là phương thức được sử dụng để thực hiện một câu lệnh SQL không trả về kết quả dữ liệu. Ví dụ, khi bạn muốn tạo một bảng mới, thêm hoặc xóa dữ liệu, bạn sẽ sử dụng phương thức execSQL().
Mở trang câu hỏi này →
Aprovides the methods that the rest of the app uses to interact with UI in the activity.
Bprovides the methods that the rest of the app uses to interact with sharedpreferences.
Cprovides the methods that the rest of the app uses to interact with data in reference table.
DNone of the others.
Lời giải
Mục đích của lớp Data Access Object (DAO) là cung cấp các phương thức cho phần còn lại của ứng dụng để tương tác với dữ liệu trong bảng tham chiếu. DAO giúp tách biệt logic truy vấn dữ liệu khỏi phần còn lại của ứng dụng, làm cho mã nguồn trở nên dễ đọc, dễ bảo trì và dễ mở rộng. Nó cũng giúp giảm thiểu sự phụ thuộc vào cơ sở dữ liệu và tăng cường tính bảo mật. DAO thường được sử dụng trong các ứng dụng lớn hoặc phức tạp, nơi mà dữ liệu được lưu trữ trong nhiều bảng và cần được truy xuất một cách linh hoạt.
Mở trang câu hỏi này →
Ahash map
Bkey-value pair
Cbuilt in database
DB-Tree
Lời giải
Shared Preferences trong Android sử dụng một cấu trúc dữ liệu để lưu trữ dữ liệu. Cấu trúc này là một cặp khóa-giá trị (key-value pair), nơi mỗi khóa (key) được liên kết với một giá trị (value) cụ thể. Điều này cho phép bạn lưu trữ và lấy lại dữ liệu một cách dễ dàng và hiệu quả. Khi bạn lưu trữ dữ liệu vào Shared Preferences, nó sẽ được chuyển đổi thành một chuỗi JSON và được lưu trữ trong một tệp tin trên thiết bị. Khi bạn muốn lấy lại dữ liệu, bạn có thể sử dụng khóa (key) để truy cập vào giá trị (value) tương ứng. Cấu trúc cặp khóa-giá trị này là một trong những lý do khiến Shared Preferences trở thành một công cụ phổ biến trong việc lưu trữ dữ liệu trong ứng dụng Android.
Mở trang câu hỏi này →
AIt allows buffering of query results
BIt is efficient since all data needn't be loaded into memory
CIt ensures that query results are right
DIt alleviates the need to explicitly call close() on the Cursor
Lời giải
SQLite query() phương thức trả về một Cursor vì một số lý do sau đây. Trước hết, nó cho phép đệm kết quả truy vấn, giúp giảm thiểu việc truy cập cơ sở dữ liệu nhiều lần. Điều này đặc biệt hữu ích khi xử lý dữ liệu lớn. Thứ hai, nó giúp tăng hiệu suất vì không cần phải tải toàn bộ dữ liệu vào bộ nhớ. Điều này giúp giảm thiểu việc sử dụng tài nguyên hệ thống và tăng tốc độ xử lý. Cuối cùng, nó giúp giảm thiểu việc phải gọi thủ công phương thức close() trên Cursor, giúp giảm thiểu việc lãng phí tài nguyên hệ thống.
Mở trang câu hỏi này →
ATo synchronize local data with remote data
BTo offer complex data to other apps
CTo notify activities automatically when data changes
DTo enable long-duration operations to execute in the background
Lời giải
Thứ ba, để thông báo cho các hoạt động tự động khi dữ liệu thay đổi. Khi dữ liệu được cập nhật, content provider sẽ thông báo cho các hoạt động liên quan, giúp đảm bảo rằng ứng dụng của bạn luôn có dữ liệu mới nhất.
Mở trang câu hỏi này →
A@Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return mDB.update(values, selection, selectionArgs); }
B@Override public void update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return mDB.update(values, selection, selectionArgs); }
C@Override public boolean update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return mDB.update(values, selection, selectionArgs); }
D@Override public long update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return mDB.update(values, selection, selectionArgs); }
Lời giải

Để thực hiện phương thức update() trong một Content Provider, bạn cần sử dụng phương thức update() của cơ sở dữ liệu. Phương thức update() này sẽ cập nhật các giá trị trong cơ sở dữ liệu dựa trên các điều kiện lọc được cung cấp. Trong phương thức update() của Content Provider, bạn cần sử dụng các tham số sau: uri (mô tả URI của bản ghi cần cập nhật), ContentValues (mô tả các giá trị cần cập nhật), selection (mô tả điều kiện lọc), và selectionArgs (mô tả các tham số của điều kiện lọc). Phương thức update() của Content Provider sẽ trả về số lượng bản ghi được cập nhật. Ví dụ, phương thức update() có thể được thực hiện như sau: @Override

Lời giải
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    return mDB.update(values, selection, selectionArgs);
}

Phương thức này sẽ cập nhật các giá trị trong cơ sở dữ liệu dựa trên các điều kiện lọc được cung cấp và trả về số lượng bản ghi được cập nhật.

Mở trang câu hỏi này →
ATo manage app preferences and settings
BTo fetches data that the app requests from a repository
CTo send notifications to users
DTo draw UI components on the screen
Lời giải
Một Content Provider trong Android là một lớp phần mềm giúp quản lý và cung cấp dữ liệu cho các ứng dụng khác. Mục đích chính của Content Provider là cung cấp dữ liệu cho các ứng dụng khác khi chúng yêu cầu. Điều này cho phép các ứng dụng khác nhau chia sẻ dữ liệu và sử dụng dữ liệu từ nhau mà không cần phải lưu trữ dữ liệu đó trong mỗi ứng dụng riêng biệt. Ví dụ, một ứng dụng có thể sử dụng Content Provider để truy cập dữ liệu liên hệ của người dùng từ ứng dụng khác. Content Provider cũng giúp bảo vệ dữ liệu bằng cách kiểm soát quyền truy cập vào dữ liệu và đảm bảo rằng dữ liệu được sử dụng một cách hợp pháp.
Mở trang câu hỏi này →
Apublic static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + CONTENT_PATH);
Bpublic static final Uri CONTENT_URI = Uri.parse("http://" + AUTHORITY + "/" + CONTENT_PATH);
Cpublic static final Uri CONTENT_URI = Uri.parse("file://" + AUTHORITY + "/" + CONTENT_PATH);
Dpublic static final Uri CONTENT_URI = Uri.parse("data://" + AUTHORITY + "/" + CONTENT_PATH);
Lời giải

Trong lập trình Android, một Content URI (URI nội dung) là một địa chỉ duy nhất để truy cập vào dữ liệu trong cơ sở dữ liệu. Để định nghĩa một Content URI trong một lớp Contract, bạn cần sử dụng phương thức Uri.parse() và xây dựng một chuỗi URI theo định dạng 'content://authority/path'. Ví dụ, nếu bạn muốn truy cập vào dữ liệu ở đường dẫn '/example' trong cơ sở dữ liệu có tên là 'com.example.app', bạn có thể định nghĩa Content URI như sau:

Lời giải
public static final Uri CONTENT_URI = Uri.parse("content://com.example.app/example");

. Điều này cho phép các ứng dụng khác truy cập vào dữ liệu của bạn thông qua ContentResolver.

Mở trang câu hỏi này →
AString value = pref.getString("key", "default");
BString value = pref.getString("key", "null");
CString value = pref.getString("key", "empty");
DString value = pref.getString("key", "none");
Lời giải

Để lấy dữ liệu từ Shared Preferences trong Android, bạn cần sử dụng phương thức getString() của SharedPreferences. Phương thức này yêu cầu hai tham số: key (chìa khóa) và defaultValue (giá trị mặc định). Nếu giá trị được lưu trữ dưới key không tồn tại, phương thức sẽ trả về defaultValue. Ví dụ, bạn muốn lấy giá trị của key "key", nhưng giá trị này chưa được lưu trữ, thì bạn có thể sử dụng phương thức như sau: String value = pref.getString("key", "default");. Trong ví dụ này, "default" là giá trị mặc định sẽ được trả về nếu giá trị được lưu trữ dưới key "key" không tồn tại.

Mở trang câu hỏi này →
AIt indicates that the external storage is not available.
BIt indicates that the external storage is available for read and write operations.
CIt indicates that the external storage is available for read-only operations.
DIt indicates that the external storage is permanently removed.
Lời giải
Trạng thái MEDIA_MOUNTED trong lưu trữ ngoại vi có ý nghĩa quan trọng trong việc xác định khả năng truy cập và sử dụng của lưu trữ này. Khi một thiết bị lưu trữ ngoại vi được kết nối và trạng thái của nó là MEDIA_MOUNTED, điều đó có nghĩa là thiết bị này đã sẵn sàng để sử dụng và có thể thực hiện các hoạt động đọc và ghi dữ liệu. Điều này cho phép các ứng dụng di động truy cập và sử dụng dữ liệu trên thiết bị lưu trữ ngoại vi một cách hiệu quả. Trạng thái này cũng cho phép các ứng dụng di động thực hiện các hoạt động như sao chép, xóa và cập nhật dữ liệu trên thiết bị lưu trữ ngoại vi.
Mở trang câu hỏi này →