Я разрабатываю приложение, работающее в автономном режиме, которое использует 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
?
Я не уверен, достаточно ли этой информации. Если вам нужно больше информации, я могу добавить их.
РЕДАКТИРОВАТЬ: Я только что узнал, что учетная запись входит в систему, так что это не проблема. Проблема должна быть где-то еще.