0

わかりました、私はIllegalArgumentExceptionあるべきではない時点で取得しています。

AccountAccountManager を使用して保存されたカスタム拡張機能があります。

// 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 でこのメソッドに「入る」と、デバッグ パースペクティブで次のようになります。

ここに画像の説明を入力

値は null ではありません >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);

これがデータを保存する方法であるかどうかはまだわかりませんが、Accountこれまでのところうまくいくことができたのはこれだけです。

于 2011-12-09T11:57:48.473 に答える