2016-05-12 90 views
1

我試圖讓READ_CONTACTS許可版本的Android M和調用:得到錯誤,同時要求READ_CONTACTS許可版本的Android M

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1); 

應用程序崩潰與以下情況除外:

05-12 17:08:24.578: E/AndroidRuntime(2846): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity}: java.lang.NullPointerException: Attempt to get length of null array 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.os.Handler.dispatchMessage(Handler.java:102) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.os.Looper.loop(Looper.java:148) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.ActivityThread.main(ActivityThread.java:5417) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at java.lang.reflect.Method.invoke(Native Method) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
05-12 17:08:24.578: E/AndroidRuntime(2846): Caused by: java.lang.NullPointerException: Attempt to get length of null array 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.computePermissionGrantState(GrantPermissionsActivity.java:293) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.updateDefaultResults(GrantPermissionsActivity.java:343) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.onCreate(GrantPermissionsActivity.java:100) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.Activity.performCreate(Activity.java:6251) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
05-12 17:08:24.578: E/AndroidRuntime(2846):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 

我也曾在指定<uses-permission android:name="android.permission.READ_CONTACTS" /> Manifest文件。

+0

你確定你的問題中的代碼是什麼產生這個堆棧跟蹤?我對該堆棧跟蹤的解釋表明,也許你意外地用'null''字符串[]'調用'requestPermissions()'。 – CommonsWare

+2

您是否擁有在清單中正確位置列出的權限?也就是說,在''標籤之外。 –

+1

@MikeM。謝謝男人,我無意中把它放在應用程序標籤中,它現在正在工作。 –

回答

1

縱觀源GrantPermissionsActivity,在computePermissionGrantState()方法的唯一的地方,你可以從Attempt to get length of null array得到了NullPointerException是在這一行:

for (int i = 0; i < callingPackageInfo.requestedPermissions.length; i++) { 

既然你說你確實上市清單中的許可,它會跟隨它只是在錯誤的地方,並且實際上不在那裏。確保<uses-permission>元素位於<application>標記之外即可解決問題。

+0

謝謝男人,我不小心把它放在應用程序標籤裏,它現在正在工作。 –

+0

認爲這個例外應該告訴我們,用當前堆棧跟蹤來理解這個問題是非常困難的。 –

+1

是的,如果他們檢查那個會很好,然後用適當的信息拋出一個「例外」,但是可以。乾杯! –