एक स्टब कॉन्टेंट प्रोवाइडर बनाएं

सिंक अडैप्टर फ़्रेमवर्क को इस तरह से डिज़ाइन किया गया है कि वह डिवाइस के डेटा के साथ काम करता है. इस डेटा को सुविधाजनक और बहुत ही सुरक्षित कॉन्टेंट देने वाला फ़्रेमवर्क. इस वजह से, सिंक अडैप्टर फ़्रेमवर्क को कि फ़्रेमवर्क का इस्तेमाल करने वाले ऐप्लिकेशन ने अपने स्थानीय डेटा के लिए पहले ही कॉन्टेंट देने वाले की जानकारी दे दी है. अगर सिंक अडैप्टर फ़्रेमवर्क आपके सिंक अडैप्टर को चलाने की कोशिश करता है और आपके ऐप्लिकेशन के पास कॉन्टेंट देने वाला है, तो आपका सिंक अडैप्टर क्रैश हो जाता है.

अगर कोई ऐसा नया ऐप्लिकेशन डेवलप किया जा रहा है जो डेटा को सर्वर से डिवाइस में ट्रांसफ़र करता है, तो आपको स्थानीय डेटा को कॉन्टेंट उपलब्ध कराने वाली कंपनी में सेव करें. इसके लिए उनकी अहमियत के अलावा सिंक अडैप्टर, कॉन्टेंट देने वाले अलग-अलग तरह के सुरक्षा से जुड़े फ़ायदे देते हैं. साथ ही, खास तौर पर जिन्हें Android सिस्टम पर डेटा स्टोरेज हैंडल करने के लिए डिज़ाइन किया गया है. कॉन्टेंट बनाने के बारे में ज़्यादा जानने के लिए कॉन्टेंट प्रोवाइडर बनाना पर जाएं.

हालांकि, अगर आपने पहले से ही स्थानीय डेटा को किसी अन्य फ़ॉर्म में सेव किया है, तो अब भी सिंक करने की सुविधा का इस्तेमाल किया जा सकता है अडैप्टर की मदद से डेटा ट्रांसफ़र किया जाता है. इसके लिए, सिंक अडैप्टर फ़्रेमवर्क की ज़रूरी शर्तों को पूरा करने के लिए तो अपने ऐप्लिकेशन में कोई स्टब कॉन्टेंट प्रोवाइडर जोड़ें. एक स्टब प्रोवाइडर कॉन्टेंट प्रोवाइडर क्लास है, लेकिन इसके सभी ज़रूरी तरीकों में null या 0 दिखता है. अगर आपको कोई स्टब प्रोवाइडर जोड़ें, फिर किसी भी स्टोरेज से डेटा ट्रांसफ़र करने के लिए सिंक अडैप्टर का इस्तेमाल करें किस तरह काम करते हैं.

अगर आपके ऐप्लिकेशन में पहले से ही कॉन्टेंट प्रोवाइडर मौजूद है, तो आपको स्टब कॉन्टेंट प्रोवाइडर की ज़रूरत नहीं है. ऐसी स्थिति में, आप इस लेसन को छोड़कर लेसन पर आगे बढ़ सकते हैं सिंक अडैप्टर बनाना. अगर आपके पास इस लेसन में बताया गया है कि एक स्टब कॉन्टेंट प्रोवाइडर को कैसे जोड़ें, जिससे अपने सिंक अडैप्टर को फ़्रेमवर्क में प्लग करें.

कोई स्टब कॉन्टेंट प्रोवाइडर जोड़ें

अपने ऐप्लिकेशन के लिए स्टब कॉन्टेंट प्रोवाइडर बनाने के लिए, क्लास की अवधि बढ़ाएं ContentProvider और इसके ज़रूरी तरीकों को स्टब करें. नीचे दिए गए स्निपेट में आपको स्टब प्रोवाइडर बनाने का तरीका बताया गया है:

Kotlin

/*
 * 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
}

Java

/*
 * 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"
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है यूआरआई अथॉरिटी, जो स्टब कॉन्टेंट देने वाले की पहचान करती है. अपने ऐप्लिकेशन के लिए इस वैल्यू को सेट करें ".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>

अब जब आपने सिंक अडैप्टर फ़्रेमवर्क के लिए ज़रूरी डिपेंडेंसी बना ली है, तो आपके डेटा ट्रांसफ़र कोड को इनकैप्सुलेट करने वाला कॉम्पोनेंट बनाने के लिए. इस कॉम्पोनेंट को सिंक अडैप्टर. अगले लेसन में, आपको अपने ऐप्लिकेशन में इस कॉम्पोनेंट को जोड़ने का तरीका बताया गया है.