skip to Main Content

I got this error when I tried to debug my app

java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Lcom/cscodetech/townclap/activity/LoginActivity; or its super classes (declaration of 'com.zestar.myclip.activity.LoginActivity' appears in /data/app/com.zestar.myclip-1/base.apk:classes2.dex)
        at com.zestar.myclip.activity.LoginActivity.onCreate(LoginActivity.java:92)

The logcat pointed to this line of code

requestPermissions(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 1);

What is wrong with that line

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
        FirebaseApp.initializeApp(this);
        requestPermissions(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        custPrograssbar = new CustPrograssbar();
        sessionManager = new SessionManager(LoginActivity.this);
        atCode.setOnFocusChangeListener((view, b) -> {
            if (!b) {
                // on focus off
                String str = atCode.getText().toString();

                ListAdapter listAdapter = atCode.getAdapter();
                for (int i = 0; i < listAdapter.getCount(); i++) {
                    String temp = listAdapter.getItem(i).toString();
                    if (str.compareTo(temp) == 0) {
                        return;
                    }
                }

                atCode.setText("");

            }
        });
        getCodelist();
    }

2

Answers


  1. as requestPermissions like @TylerV said, try using this way instead
    as instructed in
    Documentation for how to request app permissions | Android Developers

    this should be the right way to request permissions in fragments which goes as this:

    1. You first initialize this variable in fragment/activity which specifies what should happen if the permissions were granted or not:
    private ActivityResultLauncher requestPermissionLauncher =
                registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), result -> { {
                        //result is a map(string permission,boolean granted or not)
                        //to check if all permissions were granted or not
                        if(result.containsValue(false)){ 
                        // Explain to the user that the feature is unavailable because
                        // the features requires a permission that the user has denied.
                        // At the same time, respect the user's decision. Don't link to
                        // system settings in an effort to convince the user to change
                        // their decision.
                        Toast.makeText(getContext(), "Can't continue without the required permissions", Toast.LENGTH_LONG).show();
                        }
                        else { 
                           //continue your work flow
                        }
                            
                    });
    
    1. Then when you need to request for a permission you call launch on the object you declared with an array holding the permission you’re requesting :
                if (ActivityCompat.checkSelfPermission(getContext(),
                        Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED ||  
                        ActivityCompat.checkSelfPermission(getContext(),
                        Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ||   
                        ActivityCompat.checkSelfPermission(getContext(),
                        Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.ACCESS_FINE_LOCATION) {
    
                        requestPermissionLauncher.launch(new String[]{Manifest.permission.CALL_PHONE,
                        Manifest.permission.ACCESS_COARSE_LOCATION,
                        Manifest.permission.ACCESS_FINE_LOCATION});
    
                } else // continue your work
    
    Login or Signup to reply.
  2. Please provide your logs when exception occurs. Maybe error is because of android version. You must check if android version is bigger than Api level 26 (Marshmallow):

     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
         requestPermissions(INITIAL_PERMS, INITIAL_REQUEST);
     }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search