在代码走到了requestPermission的时候报了一个No virtual method requestPermissions的错误,是因为同一个类依赖了两个jar包的原因吗?
1.代码
package com.example.calendar3;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Process;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private static final int REQUEST_PERMISSION_CODE=1;
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkCalendarPermission();
        queryCalendar();
    }
    private void queryCalendar() { ContentResolver contentResolver = getContentResolver();
        Uri uri = Uri.parse("content://"+"com.android.calendar/"+"calendars");
        Cursor query = contentResolver.query(uri, null, null, null, null);
        String[] colunmNames =query.getColumnNames();
        while (query.moveToNext()){
            Log.d(TAG,"----------");
            for (String colunmName : colunmNames) {
                int columnIndex = query.getColumnIndex(colunmName);
                query.getString(columnIndex);
            }
            Log.d(TAG,"----------");
        }
    }
    @RequiresApi(api = Build.VERSION_CODES.M)
    private void checkCalendarPermission() {
        // int readpermission = checkSelfPermission(Manifest.permission.READ_CALENDAR);
        //int writepermission = checkSelfPermission(Manifest.permission.WRITE_CALENDAR);
        int readpermission = checkPermission(Manifest.permission.READ_CALENDAR,android.os.Process.myPid(), Process.myUid());
        int writepermission = checkPermission(Manifest.permission.READ_CALENDAR,android.os.Process.myPid(), Process.myUid());
        if (readpermission!= PackageManager.PERMISSION_GRANTED||writepermission!=PackageManager.PERMISSION_GRANTED){
            //表示没有权限
        }else {
            //去获取权限
            requestPermissions(new String[]{Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR},REQUEST_PERMISSION_CODE);
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode==REQUEST_PERMISSION_CODE){
            if (grantResults.length==2&&grantResults[0]==PackageManager.PERMISSION_GRANTED&&grantResults[1]==PackageManager.PERMISSION_GRANTED){
                //获取权限成功
                Log.d(TAG,"request permission successfully");
            }else {
                //获取权限失败
                Log.d(TAG,"request permission falied");
                finish();
            }
        }
    }
}
2.logcat的报错部分
E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.example.calendar3, PID: 8085
  java.lang.NoSuchMethodError: No virtual method requestPermissions([Ljava/lang/String;I)V in class Lcom/example/calendar3/MainActivity; or its super classes (declaration of 'com.example.calendar3.MainActivity' appears in /data/app/com.example.calendar3-1/base.apk:classes3.dex)
    at com.example.calendar3.MainActivity.checkCalendarPermission(MainActivity.java:55)
    at com.example.calendar3.MainActivity.onCreate(MainActivity.java:25)
    at android.app.Activity.performCreate(Activity.java:5990)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
    at android.app.ActivityThread.access$800(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
你跑在什么版本的系统上呢?
6.0以下的系统可能没有,6.0以上的系统有。如果是版本的问题,加个系统版本判断即可。