2012-03-21 5 views
5

내 앱이 인증 토큰을 공유하기 위해 계정 관리자를 사용하며 초기 4.0에서 정상적으로 작동합니다. 하지만 Nexus S (4.0.3)에서 앱을 사용해 볼 때마다 getAuthToken 메소드를 호출 할 때마다 NPE가 발생합니다. 스택 추적 다음과 같이 : 나는 구글의 authToken에를 얻을 때getAuthToken이 작동하지 않습니다 ICS

E/AndroidRuntime(5282): java.lang.RuntimeException: Unable to start activity ComponentInfo{android/android.accounts.Gra 
ntCredentialsPermissionActivity}: java.lang.NullPointerException 
E/AndroidRuntime(5282):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
E/AndroidRuntime(5282):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
E/AndroidRuntime(5282):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
E/AndroidRuntime(5282):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
E/AndroidRuntime(5282):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(5282):  at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(5282):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
E/AndroidRuntime(5282):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(5282):  at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(5282):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime(5282):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime(5282):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(5282): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(5282):  at android.accounts.GrantCredentialsPermissionActivity.onCreate(GrantCredentialsPermissi 
onActivity.java:84) 
E/AndroidRuntime(5282):  at android.app.Activity.performCreate(Activity.java:4465) 
E/AndroidRuntime(5282):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
E/AndroidRuntime(5282):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
E/AndroidRuntime(5282):  ... 11 more 
W/ActivityManager( 151): Force finishing activity android/.accounts.GrantCredentialsPermissionActivity 

하지만, 그것을 잘 작동합니다. 내 질문 : 내 코드에 문제가 있습니까? 어떻게 해결할 수 있습니까? 또는 안드로이드의 버그이며 나중에 수정 될 예정입니까?

+2

누군가가 이것에 대한 버그 문제를보고했습니다 도움이 http://code.google.com/p/android/issues/detail?id=23421 – rds

답변

1

이 문제는 잠시 동안 나를 죽이고 있었다, 그러나 이것은 ICS 4.0.3에 나를 위해 일한 :

new AccountManagerCallback<Bundle>() { 

@Override 
public void run(AccountManagerFuture<Bundle> future) { 
    Bundle bundle; 

    try { 

     bundle = future.getResult(); 
     Intent intent = (Intent)bundle.get(AccountManager.KEY_INTENT); 
     if(intent != null){           

      startActivity(intent); 
    //In the activity that runs this I check for a flag in the onResume, which tells me that we returned from this activity 

     } 
     else{ 
      //we have the token! 
     } 

    } catch (OperationCanceledException e) { 

    } catch (AuthenticatorException e) { 

    } catch (IOException e) { 

    } 

    } 
} 

이 방법 : '콜백'과 같은 어떤 것을 보이는

AccountManager am = AccountManager.get(context); 
Account[] accounts = am.getAccountsByType("com.google"); 
Account selected = accounts[0]; 
am.getAuthToken(account, "ah", false, callback, null); 

GrantCredentialsPermissionActivity를 반환하지 않으면 'LoginActivity'와 같은 다른 값을 반환합니다.

희망이

+0

그러나 비 구글 계정에 대한? –

+0

Google 이외의 계정으로 시도하지 않았습니다. – Theblacknight

+0

이 오류는 매개 변수화 된 콜백에 도달하기 전에 나 자신을 위해 발생합니다. 그러나'getAccountsByType (String s)'대신'getAccounts()'를 사용하면 해결됩니다. (http://stackoverflow.com/questions/13577100/google-drive-sdk-error에서 제안 된대로) – Robadob

관련 문제