IllegalArgumentException: addAccount не поддерживается

Я выполнил это описание, чтобы добавить адаптер синхронизации.

Но есть ошибка litte 🙁

Когда я открываю Настройки -> Учетная запись -> Добавить учетную запись и выберите мою учетную запись, я получаю это сообщение об ошибке

java.lang.IllegalArgumentException: addAccount not supported at android.accounts.AccountManager.convertErrorToException(AccountManager.java:2147) at android.accounts.AccountManager.-wrap0(AccountManager.java) at android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1993) at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69) at android.os.Binder.execTransact(Binder.java:453) 

Похоже, что этот сбой происходит от преобразования класса Java Authenticator в класс Kotlin.

Класс Java блокируется следующим образом:

 public class Authenticator extends AbstractAccountAuthenticator { private final Context mContext; // Simple constructor public Authenticator(Context context) { super(context); mContext = context; } // Editing properties is not supported @Override public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { throw new UnsupportedOperationException(); } @Override public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException { SyncUtilsKt.createSyncAccount(mContext); final Bundle bundle = new Bundle(); bundle.putString(AccountManager.KEY_ACCOUNT_NAME, ConstantsKt.SYNC_ACCOUNT); bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, BuildConfig.ACCOUNT_TYPE); return bundle; } // Ignore attempts to confirm credentials @Override public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) throws NetworkErrorException { return null; } // Getting an authentication token is not supported @Override public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Getting a label for the auth token is not supported @Override public String getAuthTokenLabel(String authTokenType) { throw new UnsupportedOperationException(); } // Updating user credentials is not supported @Override public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Checking features for the account is not supported @Override public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) throws NetworkErrorException { throw new UnsupportedOperationException(); } } 

После преобразования его в Kotlin он блокируется следующим образом:

 class Authenticator(private val mContext: Context) : AbstractAccountAuthenticator(mContext) { // Editing properties is not supported override fun editProperties(response: AccountAuthenticatorResponse, accountType: String): Bundle { throw UnsupportedOperationException() } @Throws(NetworkErrorException::class) override fun addAccount(response: AccountAuthenticatorResponse, accountType: String, authTokenType: String, requiredFeatures: Array<String>, options: Bundle): Bundle { createSyncAccount(mContext) val bundle = Bundle() bundle.putString(AccountManager.KEY_ACCOUNT_NAME, SYNC_ACCOUNT) bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, BuildConfig.ACCOUNT_TYPE) return bundle } // Ignore attempts to confirm credentials @Throws(NetworkErrorException::class) override fun confirmCredentials(response: AccountAuthenticatorResponse, account: Account, options: Bundle): Bundle? { return null } // Getting an authentication token is not supported @Throws(NetworkErrorException::class) override fun getAuthToken(response: AccountAuthenticatorResponse, account: Account, authTokenType: String, options: Bundle): Bundle { throw UnsupportedOperationException() } // Getting a label for the auth token is not supported override fun getAuthTokenLabel(authTokenType: String): String { throw UnsupportedOperationException() } // Updating user credentials is not supported @Throws(NetworkErrorException::class) override fun updateCredentials(response: AccountAuthenticatorResponse, account: Account, authTokenType: String, options: Bundle): Bundle { throw UnsupportedOperationException() } // Checking features for the account is not supported @Throws(NetworkErrorException::class) override fun hasFeatures(response: AccountAuthenticatorResponse, account: Account, features: Array<String>): Bundle { throw UnsupportedOperationException() } } 

Я думаю, что что-то было неправильно преобразовано, но что?

    Я нашел свою ошибку. Метод addAccount требует аннотации. Наконец, это выглядит так:

     @Throws(NetworkErrorException::class) override fun addAccount(response: AccountAuthenticatorResponse, accountType: String, authTokenType: String?, requiredFeatures: Array<String>?, options: Bundle?): Bundle? { val accountManager = mContext.getSystemService(Context.ACCOUNT_SERVICE) as AccountManager val accounts = accountManager.getAccountsByType("example.com") if (accounts.size == 0) { val newAccount = Account("Sync Account", "example.com") accountManager.addAccountExplicitly(newAccount, null, null) } val bundle = Bundle() bundle.putString(AccountManager.KEY_ACCOUNT_NAME, "Sync Account") bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, "example.com") return bundle }