简体   繁体   中英

Android Studio: Variable 'requiredPermissions' is accessed from within inner class, needs to be declared final

I'm working with run time permissions and trying to make a method displaying permission rationale/s for taken permission/s and rationale/s The problem is: "Variable 'requiredPermissions' is accessed from within inner class, needs to be declared final"

That's how I call the method:

       showRationale(R.string.permission_ACCESS_FINE_LOCATION_rationale, new String[]{Manifest.permission.ACCESS_FINE_LOCATION});

And that's the method:

private void showRationale(int rationale, String[] requiredPermissions) {
    Snackbar.make(findViewById(R.id.myCoordinatorLayout), rationale, Snackbar.LENGTH_INDEFINITE)
            .setAction(R.string.go_grant_permission, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                                                                     // 'requiredPermissions' below causes the problem
                    ActivityCompat.requestPermissions(MapsActivity.this, requiredPermissions, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
                }
            })
            .show();
}

您可以通过界面实现onClick,而不必将此变量定为final。

What about this:

private void showRationale(int rationale, final String[] requiredPermissions) {
    Snackbar.make(findViewById(R.id.myCoordinatorLayout), rationale, Snackbar.LENGTH_INDEFINITE)
            .setAction(R.string.go_grant_permission, new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                                                                     // 'requiredPermissions' below causes the problem
                    ActivityCompat.requestPermissions(MapsActivity.this, requiredPermissions, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
                }
            })
            .show();
}

The problem is that local variables (and method arguments) must be final to be accessed inside inner classes like your OnClickListener . So you should add a final keyword before a declaration of the argument. To do so, change this line

private void showRationale(int rationale, String[] requiredPermissions) {

to

private void showRationale(int rationale, final String[] requiredPermissions) {

Read more on this topic here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM