Ошибка при чтении метки поставщика контента

#android #android-contentprovider #android-syncadapter

#Android #android-contentprovider #android-синхронизация

Вопрос:

Итак, я пытаюсь реализовать синхронизацию на основе SyncAdapter моего поставщика контента и сервера. Кажется, все создано и инициализировано хорошо, и я вижу свою учетную запись в разделе Учетные записи и синхронизация, а также вижу флажок для синхронизации моего поставщика контента.

Но я получил странную ошибку в LogCat:

ОШИБКА / Настройки учетных записей (130): провайдеру требуется метка для авторизации ‘com.opussync.model.db.opuscontentprovider’

Но я точно установил эту метку в манифесте!

И вот почему я думаю, что когда я пытаюсь установить флажок синхронизации в Data amp; Синхронизация моей учетной записи, я получаю сообщение:

В настоящее время возникают проблемы с синхронизацией. Он скоро вернется

Вот основные части моего манифеста:

     <!-- CONTENT PROVIDER -->

    <provider 
        android:name=".model.db.OpusContentProvider"
        android:label="BLABLABLA"
        android:authorities=".model.db.opuscontentprovider"
    ></provider>

    <!-- SERVICES -->

    <service android:name=".service.OpusAccountsSyncService" android:exported="true" android:process=":zencoosync">
        <intent-filter >
            <action android:name = "android.accounts.AccountAuthenticator"/>
        </intent-filter>
        <meta-data android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator" />
    </service>

     <service 
        android:name=".model.syncadapter.SyncService" 
        android:exported="true"
        android:syncable="true"
     >
        <intent-filter>
            <action android:name="android.content.SyncAdapter" />
        </intent-filter>
        <meta-data
            android:name="android.content.SyncAdapter"
            android:resource="@xml/syncadapter" />
    </service>
  

Ответ №1:

Имя пакета не добавляется автоматически в android:authorities .

Итак, либо

  • измените android:authorities=".model.db.opuscontentprovider" на android:authorities="com.opussync.model.db.opuscontentprovider" или
  • используйте content://.model.db.opuscontentprovider в качестве базового URL для поставщика контента в коде.