2016-07-28 2 views
0

Я работаю с разрешениями времени выполнения и пытается создать метод, отображающий обоснование/s разрешения на получение разрешений/s и обоснование/с проблема заключается в том: «Переменная„requiredPermissions“доступен внутри внутреннего класса должен быть объявлен окончательный»Android Studio: переменная «requiredPermissions» доступна изнутри внутреннего класса, должна быть объявлена ​​окончательной

Вот как я вызываю метод:

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

И это метод:

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(); 
} 
+0

Добавить 'final' перед' String [] requiredPermations': 'final String [] requiredPermissions'. –

ответ

0

Вы можете реализовать onClick через интерфейс и не делать эту переменную окончательной.

0

Что об этом:

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(); 
} 
0

Проблема заключается в том, что локальные переменные (и аргументы метода) должны быть final быть доступны внутри внутренних классов, как ваш OnClickListener. Поэтому перед объявлением аргумента вы должны добавить ключевое слово final. Чтобы сделать это, измените эту строку

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

в

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

Читать больше на эту тему here.

Смежные вопросы

 Смежные вопросы