tôi nhận được một kỳ lạ nằm ngoài giới hạn ngoại lệ trong Cửa hàng Play giao diện điều khiển liên quan đến android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallbackArrayIndexOutOfBoundsException Strange trong android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.example.MyFragmentActivity.onRequestPermissionsResult(MyFragmentActivity.java:2068)
at android.app.Activity.requestPermissions(Activity.java:4163)
at android.support.v4.app.ActivityCompatApi23.requestPermissions(ActivityCompat23.java:32)
at android.support.v4.app.ActivityCompat.requestPermissions(ActivityCompat.java:316)
at com.example.MyFragmentActivity.onConnected(MyFragmentActivity.java:2048)
at com.google.android.gms.common.internal.zzk.zzk(Unknown Source)
at com.google.android.gms.common.api.internal.zzj.zzi(Unknown Source)
at com.google.android.gms.common.api.internal.zzh.zzpx(Unknown Source)
at com.google.android.gms.common.api.internal.zzh.onConnected(Unknown Source)
at com.google.android.gms.common.api.internal.zzl.onConnected(Unknown Source)
at com.google.android.gms.common.api.internal.zzc.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzj$zzg.zzqL(Unknown Source)
at com.google.android.gms.common.internal.zzj$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zzj$zza.zzw(Unknown Source)
at com.google.android.gms.common.internal.zzj$zzc.zzqN(Unknown Source)
at com.google.android.gms.common.internal.zzj$zzb.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Đây là thực hiện onRequestPermissionsResult tôi
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_LOCATION_PERMISSIONS:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
startLocationUpdates();
} else {
// Permission Denied
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Dòng 2068 là:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Tôi tin rằng nó tuyên bố chiều dài grantResults
là 0, đó là lý do tại sao java.lang.ArrayIndexOutOfBoundsException bị ném. Theo documentation
int: Kết quả cấp cho các điều khoản tương ứng là hoặc PERMISSION_GRANTED hoặc PERMISSION_DENIED. Không bao giờ rỗng.
grantResults
sẽ không rỗng, nhưng không nói gì về giá trị không chứa giá trị. Hơn nữa, có vẻ như cuộc gọi lại sẽ chứa ít nhất một giá trị, hoặc là PERMISSION_GRANTED
hoặc PERMISSION_DENIED
. Đây có phải là lỗi hay tôi hiểu nhầm tài liệu?
Vâng, đó là trường hợp. Câu trả lời chính xác. – jnellen
Tuyệt vời. Đúng. –
Có ai biết "yêu cầu bị hủy" nghĩa là gì không? Ai đã hủy nó? Tôi không biết bất kỳ API nào để hủy yêu cầu và tôi không hiểu cách người dùng có thể hủy nó khi rõ ràng là có hoặc không có điều gì với người dùng ... – user3175580