无法使用ContentResolver查询方法,NoSuchMethodError [英] ContentResolver query method cannot be used, NoSuchMethodError

查看:163
本文介绍了无法使用ContentResolver查询方法,NoSuchMethodError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个读取手机电话联系人的应用程序.但是,由于我不知道的原因,由于使用的api版本,在使用query方法时遇到问题.它说Call requires API level 26 (current min is 16): android.content.ContentResolver#query.

I am creating an app that reads the phone contacts of your phone. However, for reasons that I don't know, I have a problem using the query method because of the api version that I used. It says that Call requires API level 26 (current min is 16): android.content.ContentResolver#query.

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

Here's my code I used in the oncreate method.

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版本低于我的API版本.

I know it should work since the tutorials that I have been watching has a lower API version than mine.

这是我的gradle文件:

Here's my gradle file:

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'
}

这是我的logcat中的错误.

Here's the error in my logcat.

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.

推荐答案

ContentResolver上的query()有三种风格.

There are three flavors of query() on ContentResolver. The four-parameter flavor that you are using is new to Android 8.0 (API Level 26).

自API级别1以来,五参数变量已存在,自API级别16以来,六参数变量已存在.您可能希望切换到其中之一.

The five-parameter variant has been around since API Level 1, and the six-parameter variant has been around since API Level 16. You may wish to switch to one of those.

这篇关于无法使用ContentResolver查询方法,NoSuchMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆