IllegalArgumentException:不支持addAccount

我按照这个描述来添加我的同步适配器。

但有一个小错误:-(

当我打开设置 – >帐户 – >添加帐户,并选择我的帐户我收到此错误消息

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) 

看起来这个崩溃来自将Authenticator Java类转换为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, 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): Bundle { throw UnsupportedOperationException() } } 

我认为有什么错误转换,但什么?

我发现我的错误。 addAccount方法需要一些注释。 最后它看起来像这样:

 @Throws(NetworkErrorException::class) override fun addAccount(response: AccountAuthenticatorResponse, accountType: String, authTokenType: String?, requiredFeatures: Array?, 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 } 
Interesting Posts