SyncAdapter onPerformSyn c не вызывается - PullRequest
0 голосов
/ 15 января 2020

Я разрабатываю приложение, работающее в автономном режиме, которое использует SyncAdapter для загрузки данных на веб-сервер. В основном, данные сохраняются в локальной базе данных SQLite с использованием библиотеки greenDao. Каждый раз, когда данные добавляются или удаляются, я вызываю метод performSync(), чтобы он синхронизировался с веб-сервером. Моя проблема в том, что onPerformSync() никогда не вызывают.

Я новичок в этой концепции и все еще учусь, поэтому есть несколько вещей, которые мне не понятны.

У меня есть реализовано StubAuthenticator, StubAuthenticatorService, StubProvider, SyncAdapter и SyncService, как это сделано в документации .

Я не совсем понял насчет accountType. В документации говорится:

Каркас адаптера syn c требует, чтобы у каждого адаптера syn c был тип учетной записи в форме доменного имени. Платформа использует тип учетной записи как часть внутренней идентификации адаптера syn c. Для серверов, которым требуется вход в систему, тип учетной записи вместе с учетной записью пользователя отправляется на сервер как часть учетных данных для входа. Если ваш сервер не требует входа, вы все равно должны указать тип учетной записи. В качестве значения используйте доменное имя, которым вы управляете. Хотя платформа использует его для управления вашим адаптером syn c, значение не отправляется на ваш сервер.

Мой сервер не требует входа в систему, но я не уверен, что передать accountType attribute.

Repository класс для функций базы данных:

public class UnicornRepository {

    private static String AUTHORITY = ".sync";
    private static String ACCOUNT = "dummyAccount";
    private static String ACCOUNT_TYPE = "unicorns.com"; //Not sure about this

    private static UnicornRepository instance;

    private Account mAccount;

    private UnicornRepository(Context application){
        mAccount = createSyncAccount(application);
    }

    public static UnicornRepository getInstance(Context application) {
        if (instance == null) {
            instance = new UnicornRepository(application);
        }
        return instance;
    }

    public void addUnicorn(Unicorn unicorn) {
        //Add unicorn to database
        sync();
    }

    public void deleteUnicorn(Unicorn unicorn) {
        //Delete unicorn from database
        sync();
    }

    private Account createSyncAccount(Context context) {
        Account account = new Account(ACCOUNT, ACCOUNT_TYPE);
        AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
        accountManager.addAccountExplicitly(account, null, null); //returns false
        return account;
    }

    private void sync() {
        ContentResolver.requestSync(mAccount, AUTHORITY, Bundle.EMPTY);
    }
}

accountManager.addAccountExplicitly() возвращает false, поэтому учетная запись не может войти в систему. Является ли это reasen onPerformSync() не звонят? Если да, что я должен передать accountType?

Я не уверен, достаточно ли этой информации. Если вам нужно больше информации, я могу добавить их.

РЕДАКТИРОВАТЬ: Я только что узнал, что учетная запись входит в систему, так что это не проблема. Проблема должна быть где-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...