একটি অসম্পূর্ণ বিষয়বস্তু প্রদানকারী তৈরি করুন

সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক নমনীয় এবং অত্যন্ত সুরক্ষিত সামগ্রী প্রদানকারী ফ্রেমওয়ার্ক দ্বারা পরিচালিত ডিভাইস ডেটার সাথে কাজ করার জন্য ডিজাইন করা হয়েছে৷ এই কারণে, সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক আশা করে যে ফ্রেমওয়ার্ক ব্যবহার করে এমন একটি অ্যাপ ইতিমধ্যেই তার স্থানীয় ডেটার জন্য একটি সামগ্রী প্রদানকারীকে সংজ্ঞায়িত করেছে৷ যদি সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক আপনার সিঙ্ক অ্যাডাপ্টার চালানোর চেষ্টা করে এবং আপনার অ্যাপের কোনও সামগ্রী প্রদানকারী না থাকে, তাহলে আপনার সিঙ্ক অ্যাডাপ্টার ক্র্যাশ হয়ে যাবে।

আপনি যদি একটি নতুন অ্যাপ তৈরি করেন যা একটি সার্ভার থেকে ডিভাইসে ডেটা স্থানান্তর করে, তাহলে আপনার স্থানীয় ডেটা একটি বিষয়বস্তু প্রদানকারীতে সংরক্ষণ করার বিষয়টি দৃঢ়ভাবে বিবেচনা করা উচিত। সিঙ্ক অ্যাডাপ্টারের জন্য তাদের গুরুত্ব ছাড়াও, বিষয়বস্তু প্রদানকারীরা বিভিন্ন ধরনের নিরাপত্তা সুবিধা প্রদান করে এবং বিশেষভাবে Android সিস্টেমে ডেটা স্টোরেজ পরিচালনা করার জন্য ডিজাইন করা হয়েছে। একটি বিষয়বস্তু প্রদানকারী তৈরি সম্পর্কে আরও জানতে, একটি সামগ্রী প্রদানকারী তৈরি করা দেখুন।

যাইহোক, যদি আপনি ইতিমধ্যেই অন্য ফর্মে স্থানীয় ডেটা সঞ্চয় করে থাকেন, আপনি এখনও ডেটা স্থানান্তর পরিচালনা করতে একটি সিঙ্ক অ্যাডাপ্টার ব্যবহার করতে পারেন৷ একটি বিষয়বস্তু প্রদানকারীর জন্য সিঙ্ক অ্যাডাপ্টার কাঠামোর প্রয়োজনীয়তা পূরণ করতে, আপনার অ্যাপে একটি অসম্পূর্ণ সামগ্রী প্রদানকারী যোগ করুন। একটি স্টাব প্রদানকারী বিষয়বস্তু প্রদানকারী শ্রেণী প্রয়োগ করে, কিন্তু এর প্রয়োজনীয় সমস্ত পদ্ধতি null বা 0 প্রদান করে। যদি আপনি একটি স্টাব প্রদানকারী যোগ করেন, তাহলে আপনি আপনার চয়ন করা যেকোনো স্টোরেজ প্রক্রিয়া থেকে ডেটা স্থানান্তর করতে একটি সিঙ্ক অ্যাডাপ্টার ব্যবহার করতে পারেন।

আপনার অ্যাপে যদি ইতিমধ্যেই কোনো বিষয়বস্তু প্রদানকারী থাকে, তাহলে আপনার কোনো অসম্পূর্ণ সামগ্রী প্রদানকারীর প্রয়োজন নেই। সেক্ষেত্রে, আপনি এই পাঠটি এড়িয়ে যেতে পারেন এবং একটি সিঙ্ক অ্যাডাপ্টার তৈরি করা পাঠে এগিয়ে যেতে পারেন। আপনার যদি এখনও কোনো বিষয়বস্তু প্রদানকারী না থাকে, তাহলে এই পাঠটি আপনাকে দেখায় কিভাবে একটি স্টাব সামগ্রী প্রদানকারী যোগ করতে হয় যা আপনাকে আপনার সিঙ্ক অ্যাডাপ্টারকে ফ্রেমওয়ার্কের মধ্যে প্লাগ করতে দেয়৷

একটি অসম্পূর্ণ বিষয়বস্তু প্রদানকারী যোগ করুন

আপনার অ্যাপের জন্য একটি স্টাব কন্টেন্ট প্রদানকারী তৈরি করতে, ContentProvider ক্লাস প্রসারিত করুন এবং এর প্রয়োজনীয় পদ্ধতিগুলি স্টাব আউট করুন। নিচের স্নিপেট আপনাকে দেখায় কিভাবে স্টাব প্রদানকারী তৈরি করতে হয়:

কোটলিন

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
class StubProvider : ContentProvider() {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    override fun onCreate(): Boolean  = true

    /*
     * Return no type for MIME type
     */
    override fun getType(uri: Uri): String?  = null

    /*
     * query() always returns no results
     *
     */
    override fun query(
            uri: Uri,
            projection: Array<String>,
            selection: String,
            selectionArgs: Array<String>,
            sortOrder: String
    ): Cursor?  = null

    /*
     * insert() always returns null (no URI)
     */
    override fun insert(uri: Uri, values: ContentValues): Uri? = null

    /*
     * delete() always returns "no rows affected" (0)
     */
    override fun delete(uri: Uri, selection: String, selectionArgs: Array<String>): Int = 0

    /*
     * update() always returns "no rows affected" (0)
     */
    override fun update(
            uri: Uri,
            values: ContentValues,
            selection: String,
            selectionArgs: Array<String>
    ): Int = 0
}

জাভা

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
public class StubProvider extends ContentProvider {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    @Override
    public boolean onCreate() {
        return true;
    }
    /*
     * Return no type for MIME type
     */
    @Override
    public String getType(Uri uri) {
        return null;
    }
    /*
     * query() always returns no results
     *
     */
    @Override
    public Cursor query(
            Uri uri,
            String[] projection,
            String selection,
            String[] selectionArgs,
            String sortOrder) {
        return null;
    }
    /*
     * insert() always returns null (no URI)
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }
    /*
     * delete() always returns "no rows affected" (0)
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    /*
     * update() always returns "no rows affected" (0)
     */
    public int update(
            Uri uri,
            ContentValues values,
            String selection,
            String[] selectionArgs) {
        return 0;
    }
}

ম্যানিফেস্টে প্রদানকারীকে ঘোষণা করুন

সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক যাচাই করে যে আপনার অ্যাপের একটি বিষয়বস্তু প্রদানকারী আছে কিনা যাচাই করে যে আপনার অ্যাপটি তার অ্যাপ ম্যানিফেস্টে একটি প্রদানকারী ঘোষণা করেছে। ম্যানিফেস্টে স্টাব প্রদানকারীকে ঘোষণা করতে, নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে একটি <provider> উপাদান যোগ করুন:

android:name="com.example.android.datasync.provider.StubProvider"
স্টাব বিষয়বস্তু প্রদানকারীকে প্রয়োগ করে এমন ক্লাসের সম্পূর্ণ-যোগ্য নাম উল্লেখ করে।
android:authorities="com.example.android.datasync.provider"
একটি URI কর্তৃপক্ষ যা অসম্পূর্ণ বিষয়বস্তু প্রদানকারীকে সনাক্ত করে। এটির সাথে ".provider" যুক্ত স্ট্রিং দিয়ে এই মানটিকে আপনার অ্যাপের প্যাকেজ নাম করুন৷ যদিও আপনি সিস্টেমে আপনার স্টাব প্রদানকারীকে ঘোষণা করছেন, কিছুই প্রদানকারীকে নিজেই অ্যাক্সেস করার চেষ্টা করে না।
android:exported="false"
অন্যান্য অ্যাপগুলি সামগ্রী প্রদানকারীকে অ্যাক্সেস করতে পারে কিনা তা নির্ধারণ করে৷ আপনার স্টাব বিষয়বস্তু প্রদানকারীর জন্য, মানটিকে false সেট করুন, যেহেতু অন্যান্য অ্যাপগুলিকে প্রদানকারীকে দেখার অনুমতি দেওয়ার প্রয়োজন নেই৷ এই মানটি সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক এবং সামগ্রী প্রদানকারীর মধ্যে মিথস্ক্রিয়াকে প্রভাবিত করে না।
android:syncable="true"
একটি পতাকা সেট করে যা নির্দেশ করে যে প্রদানকারী সিঙ্কযোগ্য। আপনি যদি এই পতাকাটিকে true তে সেট করেন, তাহলে আপনাকে আপনার কোডে setIsSyncable() কল করতে হবে না। পতাকা সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ককে সামগ্রী প্রদানকারীর সাথে ডেটা স্থানান্তর করার অনুমতি দেয়, তবে স্থানান্তর শুধুমাত্র তখনই ঘটবে যদি আপনি সেগুলি স্পষ্টভাবে করেন৷

নিম্নলিখিত স্নিপেট আপনাকে দেখায় কিভাবে অ্যাপ ম্যানিফেস্টে <provider> উপাদান যোগ করতে হয়:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.network.sync.BasicSyncAdapter"
    android:versionCode="1"
    android:versionName="1.0" >
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    ...
    <provider
        android:name="com.example.android.datasync.provider.StubProvider"
        android:authorities="com.example.android.datasync.provider"
        android:exported="false"
        android:syncable="true"/>
    ...
    </application>
</manifest>

এখন যেহেতু আপনি সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্কের জন্য প্রয়োজনীয় নির্ভরতা তৈরি করেছেন, আপনি এমন উপাদান তৈরি করতে পারেন যা আপনার ডেটা স্থানান্তর কোডকে এনক্যাপসুলেট করে। এই উপাদানটিকে একটি সিঙ্ক অ্যাডাপ্টার বলা হয়। পরবর্তী পাঠটি আপনাকে দেখাবে কিভাবে আপনার অ্যাপে এই উপাদানটি যোগ করবেন।