无法使用 ContentResolver 查询方法,NoSuchMethodError
ContentResolver query method cannot be used, NoSuchMethodError
我正在创建一个应用程序来读取您 phone 的 phone 联系人。但是,由于我不知道的原因,由于我使用的 api 版本,我在使用 query
方法时遇到问题。它说 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'
}
这是我的 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.access0(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()
。 four-parameter flavor that you are using 是 Android 8.0(API 级别 26)的新功能。
five-parameter 变体从 API 级别 1 开始出现,six-parameter 变体从 API 级别 16 开始出现。您可能希望切换到其中之一。
我正在创建一个应用程序来读取您 phone 的 phone 联系人。但是,由于我不知道的原因,由于我使用的 api 版本,我在使用 query
方法时遇到问题。它说 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'
}
这是我的 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.access0(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()
。 four-parameter flavor that you are using 是 Android 8.0(API 级别 26)的新功能。
five-parameter 变体从 API 级别 1 开始出现,six-parameter 变体从 API 级别 16 开始出现。您可能希望切换到其中之一。