AccountManager IllegalArgumentException:键为null

2019年9月14日 19点热度 0条评论

好的,我在一个不应该出现的地方获取了IllegalArgumentException

我有一个使用帐户管理器保存的Account自定义扩展名:

// Method inside a custom extension of Account
public boolean save(AccountManager manager) {
    removeAll(manager);
    boolean result = manager.addAccountExplicitly(this, null, toBundle());
    manager.setUserData(this, KEY_1, value1);
    manager.setUserData(this, KEY_2, value2);
    manager.setUserData(this, KEY_3, value3);
    return result;
}

键是恒定的String值,但应用仍会抛出:

java.lang.IllegalArgumentException: key is null

我不得不说我只是以这种方式附加用户数据,因为使用了:

 manager.addAccountExplicitly(this, null, toBundle());

似乎没有附加值。按键是否需要特殊的名称模式?

有人遇到过这个问题吗?

更新:

它被扔进
manager.setUserData()里面,如下所示(Android代码):

public void setUserData(final Account account, final String key, final String value) {
    if (account == null) throw new IllegalArgumentException("account is null");
    if (key == null) throw new IllegalArgumentException("key is null");
    try {
        mService.setUserData(account, key, value);
    } catch (RemoteException e) {
        // won't ever happen
        throw new RuntimeException(e);
    }
}

当我使用eclipse“进入”此方法时,在调试透视图中得到了此信息:

值不为null> o <

解决方案如下:

好的,在对androidAccountManager进行进一步研究之后,我没有找到使它像我尝试的那样工作的方法,但是我找到了解决方案。

与其将详细信息另存为用户数据束,不如使用键将其另存为authToken值,如authTokenType,如下所示:

public boolean save(AccountManager manager) {
    removeAll(manager);
    boolean result = manager.addAccountExplicitly(this, null, toBundle());
    manager.setAuthToken(this, KEY_1, value1);
    manager.setAuthToken(this, KEY_2, value2);
    manager.setAuthToken(this, KEY_3, value3);
    return result;
}

然后检索这样的值:

value1 = manager.peekAuthToken(account, KEY_1);

我仍然不确定这是否是存储
Account数据的方法,但这是迄今为止我唯一设法完成的工作。