0

好的,我正IllegalArgumentException处于不应该的地步。

我有一个Account使用 AccountManager 保存的自定义扩展:

// 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;
}

键是常量字符串值,但应用程序仍然抛出:

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 “走进”这个方法时,我在调试透视图中得到了这个:

在此处输入图像描述

值不为空 >o<

4

1 回答 1

1

的进一步研究之后,AccountManager我没有找到一种方法让它像我尝试的那样工作,但我找到了一个解决方案。

我没有将详细信息保存为用户数据包,而是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);

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

于 2011-12-09T11:57:48.473 回答