我看了篇博客,说的是一级菜单完全动态的加载,二级菜单是动态加载和静态xml布局文件。总感觉不对,主页面不应该是静态加载的吗?
在代码走到了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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7