2011-12-02 72 views
0

好吧,我得到一個IllegalArgumentException它不應該。AccountManager 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 

我不得不說,我m僅以這種方式附加用戶數據,因爲使用:

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我得到這個在調試方面:

enter image description here

的非空值> 0 <

+0

哪一行是錯誤?在你調用它之前打印出你傳遞的所有參數。 – Kevin

+0

哪裏*正確*是拋出異常? –

+0

用請求的信息更新了問題 – pablisco

回答

0

好,經過進一步的研究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); 

我還不確定這是否是爲Account存儲數據的方式,但這是我迄今爲止唯一能夠完成的工作。