<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                > 編寫:[jdneo](https://github.com/jdneo) - 原文:[http://developer.android.com/training/sync-adapters/creating-stub-provider.html](http://developer.android.com/training/sync-adapters/creating-stub-provider.html) Sync Adapter框架是設計成用來和設備數據一起工作的,而這些設備數據應該被靈活且安全的Content Provider管理。因此,Sync Adapter框架會期望應用已經為它的本地數據定義了Content Provider。如果Sync Adapter框架嘗試去運行你的Sync Adapter,而你的應用沒有一個Content Provider的話,那么你的Sync Adapter將會崩潰。 如果你正在開發一個新的應用,它將數據從服務器傳輸到一臺設備上,那么你務必應該考慮將本地數據存儲于Content Provider中。除了它對于Sync Adapter的重要性之外,Content Provider還可以提供許多安全上的好處,更何況它是專門為了在Android設備上處理數據存儲而設計的。要學習如何創建一個Content Provider,可以閱讀:[Creating a Content Provider](http://developer.android.com/guide/topics/providers/content-provider-creating.html)。 然而,如果你已經通過別的形式來存儲本地數據了,你仍然可以使用Sync Adapter來處理數據傳輸。為了滿足Sync Adapter框架對于Content Provider的要求,可以在你的應用中添加一個Stub Content Provider。一個Stub Content Provider實現了Content Provider類,但是所有的方法都返回null或者0。如果你添加了一個Stub Content Provider,無論你的數據存儲機制是什么,你都可以使用Sync Adapter來傳輸數據。 如果在你的應用中已經有了一個Content Provider,那么你就不需要創建Stub Content Provider了。在這種情況下,你可以略過這節課程,直接進入:[創建Sync Adapter](#)。如果你還沒有創建Content Provider,這節課將向你展示如何通過添加一個Stub Content Provider,將你的Sync Adapter添加到框架中。 ### 添加一個Stub Content Provider 要為你的應用創建一個Stub Content Provider,首先繼承[ContentProvider](http://developer.android.com/reference/android/content/ContentProvider.html)類,并且在所有需要重寫的方法中,我們一律不進行任何處理而是直接返回。下面的代碼片段展示了你應該如何創建一個Stub Content Provider: ~~~ /* * 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 an empty String for MIME type */ @Override public String getType() { return new String(); } /* * 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; } } ~~~ ### 在Manifest清單文件中聲明提供器 Sync Adapter框架會通過查看應用的清單文件中是否含有[`<provider>`](http://developer.android.com/guide/topics/manifest/provider-element.html)標簽,來驗證你的應用是否使用了Content Provider。為了在清單文件中聲明我們的Stub Content Provider,添加一個[`<provider>`](http://developer.android.com/guide/topics/manifest/provider-element.html)標簽,并讓它擁有下列屬性字段: **android:name="com.example.android.datasync.provider.StubProvider"** 指定實現Stub Content Provider類的完整包名。 **android:authorities="com.example.android.datasync.provider"** 指定Stub Content Provider的URI Authority。用應用的包名加上字符串`".provider"`作為該屬性字段的值。雖然你在這里向系統聲明了你的Stub Content Provider,但是這并不會導致對該Provider的訪問。 **android:exported="false"** 確定其它應用是否可以訪問Content Provider。對于Stub Content Provider而言,由于沒有讓其它應用訪問該Provider的必要,所以我們將該值設置為`false`。該值并不會影響Sync Adapter框架和Content Provider之間的交互。 **android:syncable="true"** 該標識指明Provider是可同步的。如果將這個值設置為`true`,你將不需要在代碼中調用[setIsSyncable()](http://developer.android.com/reference/android/content/ContentResolver.html#setIsSyncable(android.accounts.Account, java.lang.String, int))。這一標識將會允許Sync Adapter框架和Content Provider進行數據傳輸,但是僅僅在你顯式地執行相關調用時,這一傳輸時才會進行。 下面的代碼片段展示了你應該如何將[`<provider>`](http://developer.android.com/guide/topics/manifest/provider-element.html)標簽添加到應用的清單文件中: ~~~ <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> ~~~ 現在你已經創建了所有Sync Adapter框架所需要的依賴項,接下來你可以創建封裝數據傳輸代碼的組件了。該組件就叫做Sync Adapter。在下節課中,我們將會展示如何將這一組件添加到你的應用中。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看