Site icon AppTractor

Вопросы с собеседований: Что такое контент-провайдер (Content Provider) в Android

Контент-провайдер (Content Provider) в Android — это компонент, который предоставляет доступ к данным другим приложениям. Он представляет данные в виде таблицы или набора таблиц, похожих на таблицы в реляционной базе данных. Контент-провайдеры используются для совместного использования данных между приложениями, а также для предоставления доступа к данным, которые хранятся в приложении, другим приложениям.

Контент-провайдеры предоставляют стандартизированный интерфейс для доступа к данным. Это означает, что приложения могут легко взаимодействовать с контент-провайдерами, даже если они написаны разными разработчиками.

Они могут использоваться для хранения различных типов данных, включая контакты, календарь, фотографии и другие, в памяти устройства или в базе данных.

Чтобы создать свой провайдер, необходимо реализовать класс, который расширяет класс ContentProvider. Этот класс должен реализовать несколько методов, которые предоставляют доступ к данным.

Основные методы:

Контент-провайдеры являются важным компонентом Android. Они позволяют приложениям совместно использовать данные и предоставляют доступ к данным, которые хранятся в приложении, другим приложениям.

Вот несколько примеров использования контент-провайдеров:

Контент-провайдеры — это мощный инструмент, который может использоваться для совместного использования данных между приложениями.

Пример реализации контент-провайдера

Вот пример реализации провайдера, который хранит список контактов:

package com.example.contentprovidersuperexample;

import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;

public class ContactProvider extends ContentProvider {

private static final String TAG = "ContactProvider";

private static final String DATABASE_NAME = "contacts.db";
private static final int DATABASE_VERSION = 1;

private static final String TABLE_NAME = "contacts";

private static final String COLUMN_ID = "_id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_PHONE = "phone";

private DatabaseHelper mDatabaseHelper;

@Override
public boolean onCreate() {
    mDatabaseHelper = new DatabaseHelper(getContext());
    return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();
    Cursor cursor = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    return cursor;
}

@Override
public String getType(Uri uri) {
    return ContentResolver.CURSOR_DIR_BASETYPE + "/" + TABLE_NAME;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
    long id = db.insert(TABLE_NAME, null, values);
    getContext().getContentResolver().notifyChange(uri, null);
    return Uri.parse(uri + "/" + id);
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
    int count = db.update(TABLE_NAME, values, selection, selectionArgs);
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
    int count = db.delete(TABLE_NAME, selection, selectionArgs);
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

private static class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
                COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                COLUMN_NAME + " TEXT NOT NULL," +
                COLUMN_PHONE + " TEXT NOT NULL" +
                ");");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

Этот класс предоставляет доступ к таблице контактов, которая имеет следующие столбцы:

Он реализует основные методы, необходимые для доступа к данным:

Другие вопросы с собеседований.

Exit mobile version