代码之家  ›  专栏  ›  技术社区  ›  Erika

无法使用ContentResolver查询方法,NoSuchMethodError

  •  2
  • Erika  · 技术社区  · 6 年前

    我正在创建一个应用程序,用于读取您手机的电话联系人。然而,由于我不知道的原因,我在使用 query 方法,因为我使用的api版本。上面说 Call requires API level 26 (current min is 16): android.content.ContentResolver#query .

    这是我在oncreate方法中使用的代码。

    public void searchContacts() {
        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null);
    
        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    
                Log.i("try", name + " = " + number);
            } while (cursor.moveToNext());
        }
    
    
    
        cursor.close();
    }
    

    我知道它应该可以工作,因为我一直在看的教程的API版本比我的低。

    这是我的gradle文件:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 26
        defaultConfig {
            applicationId "raymundo.elsa.elsa"
            minSdkVersion 16
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        implementation 'com.android.support:support-v4:26.1.0'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
        implementation 'gr.pantrif:easy-android-splash-screen:0.0.1'
        implementation 'com.android.support:gridlayout-v7:26.1.0'
        implementation 'com.android.support:design:26.1.0'
        implementation 'com.android.support:cardview-v7:26.1.0'
        compile 'com.liuguangqiang.cookie:library:0.1'
    }
    

    这是我日志中的错误。

    E/AndroidRuntime: FATAL EXCEPTION: main
                          Process: raymundo.elsa.elsa, PID: 2303
                          java.lang.NoSuchMethodError: android.content.ContentResolver.query
                              at raymundo.elsa.elsa.FillUpEmergencyContacts.searchContacts(FillUpEmergencyContacts.java:130)
                              at raymundo.elsa.elsa.FillUpEmergencyContacts.onCreate(FillUpEmergencyContacts.java:52)
                              at android.app.Activity.performCreate(Activity.java:5231)
                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2243)
                              at android.app.ActivityThread.access$800(ActivityThread.java:135)
                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                              at android.os.Handler.dispatchMessage(Handler.java:102)
                              at android.os.Looper.loop(Looper.java:136)
                              at android.app.ActivityThread.main(ActivityThread.java:5019)
                              at java.lang.reflect.Method.invokeNative(Native Method)
                              at java.lang.reflect.Method.invoke(Method.java:515)
                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                              at dalvik.system.NativeStart.main(Native Method).
        Application Terminated.
    
    1 回复  |  直到 6 年前
        1
  •  12
  •   CommonsWare    6 年前

    有三种口味的 query() 在…上 ContentResolver . 这个 four-parameter flavor that you are using 是Android 8.0(API级别26)的新版本。

    五参数变量自API级别1起就存在,六参数变量自API级别16起就存在。您可能希望切换到其中一个。