"[AppName] stopped working"当我尝试在 AVD 模拟器上运行我的应用程序时



我在做一个app我做的第一件事是创建一个联系人列表结构。这是我开始的教程视频:https://www.youtube.com/watch?v=esDWSfBa-oc

一切都很顺利,直到我得到了一个错误,只能通过更改cursor.getColumnIndex()cursor.getColumnIndexOrThrow()来修复,如下面的(MainActivity)代码所示:

private void getContactList() {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+"ASC";
Cursor cursor = getContentResolver().query(
uri, null, null, null, sort
);
if (cursor.getCount() > 0){
while (cursor.moveToNext()){
String id = cursor.getString(cursor.getColumnIndexOrThrow(
ContactsContract.Contacts._ID
));
String name = cursor.getString(cursor.getColumnIndexOrThrow(
ContactsContract.Contacts.DISPLAY_NAME
));
Uri uriPhone = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " =?";
Cursor phoneCursor = getContentResolver().query(
uriPhone, null, selection,
new String[]{id}, null
);
if (phoneCursor.moveToNext()){
String number = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(
ContactsContract.CommonDataKinds.Phone.NUMBER
));
ContactModel model = new ContactModel();
model.setName(name);
model.setNumber(number);
arrayList.add(model);
phoneCursor.close();
}
}
cursor.close();
}
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MainAdapter(this,arrayList);
recyclerView.setAdapter(adapter);
}

如果我去掉"OrThrow"在cursor.getColumnIndexOrThrow()的指示,它会给我一个错误,没有可见的修复,告诉我要求在线反馈。非常奇怪,考虑到我做的一切都和视频中完全一样,任何错误要么是我还没有发现的一些错别字,要么是应用程序本身在库或预设调整方面有所不同,我根本不确定。

在看完完整的视频并完成最初的应用程序结构后,应用程序就是不打开,并且,在重新观看视频并认为我必须拒绝联系人访问(实际上不是这样的,视频只是显示如果我们拒绝访问会发生什么,因为联系人访问显然是需要的),它可以工作,但它不会显示联系人,当然。

日志中出现错误:

2021-10-18 17:43:21.130 12998-12998/com.example.wolfix E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.wolfix, PID: 12998
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wolfix/com.app.wolfix.MainActivity}: android.database.sqlite.SQLiteException: no such column: display_nameASC (code 1 SQLITE_ERROR): , while compiling: SELECT 0 AS last_time_contacted, phonetic_name, custom_ringtone, contacts_status_updates.status_ts AS contact_status_ts, pinned, photo_id, photo_file_id, contacts_status_updates.status_res_package AS contact_status_res_package, agg_presence.chat_capability AS contact_chat_capability, contacts_status_updates.status_icon AS contact_status_icon, display_name_alt, sort_key_alt, in_visible_group, starred, contacts_status_updates.status_label AS contact_status_label, phonebook_label, is_user_profile, has_phone_number, display_name_source, phonetic_name_style, send_to_voicemail, lookup, phonebook_label_alt, contact_last_updated_timestamp, photo_uri, phonebook_bucket, contacts_status_updates.status AS contact_status, display_name, sort_key, photo_thumb_uri, agg_presence.mode AS contact_presence, in_default_directory, 0 AS times_contacted, _id, name_raw_contact_id, phonebook_bucket_alt FROM view_contacts LEFT OUTER JOIN agg_presence ON (_id = agg_presence.presence_contact_id) LEFT OUTER JOIN status_updates contacts_status_updates ON (status_update_id=contacts_status_updates.status_update_data_id) WHERE ((1)) ORDER BY display_nameASC
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.database.sqlite.SQLiteException: no such column: display_nameASC (code 1 SQLITE_ERROR): , while compiling: SELECT 0 AS last_time_contacted, phonetic_name, custom_ringtone, contacts_status_updates.status_ts AS contact_status_ts, pinned, photo_id, photo_file_id, contacts_status_updates.status_res_package AS contact_status_res_package, agg_presence.chat_capability AS contact_chat_capability, contacts_status_updates.status_icon AS contact_status_icon, display_name_alt, sort_key_alt, in_visible_group, starred, contacts_status_updates.status_label AS contact_status_label, phonebook_label, is_user_profile, has_phone_number, display_name_source, phonetic_name_style, send_to_voicemail, lookup, phonebook_label_alt, contact_last_updated_timestamp, photo_uri, phonebook_bucket, contacts_status_updates.status AS contact_status, display_name, sort_key, photo_thumb_uri, agg_presence.mode AS contact_presence, in_default_directory, 0 AS times_contacted, _id, name_raw_contact_id, phonebook_bucket_alt FROM view_contacts LEFT OUTER JOIN agg_presence ON (_id = agg_presence.presence_contact_id) LEFT OUTER JOIN status_updates contacts_status_updates ON (status_update_id=contacts_status_updates.status_update_data_id) WHERE ((1)) ORDER BY display_nameASC
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:186)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:472)
at android.content.ContentResolver.query(ContentResolver.java:1183)
at android.content.ContentResolver.query(ContentResolver.java:1115)
2021-10-18 17:43:21.130 12998-12998/com.example.wolfix E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:1071)
at com.app.wolfix.MainActivity.getContactList(MainActivity.java:52)
at com.app.wolfix.MainActivity.checkPermission(MainActivity.java:43)
at com.app.wolfix.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
... 11 more

我试着:

  • 在模拟器中添加联系人(找不到,当我尝试连接到我的Google帐户时,它仍然不让我有联系人访问);
  • 以编程方式添加联系人(即使这样也不行,可能也与联系人访问有关);
  • 重新访问代码,特别是前面提到的&;orthrow &;事件部分,看看是否与此有关;
  • 检查问题是否在模拟器本身(无法得出任何结论)。

我仍然认为问题是在模拟器,我只是不知道如何确切地解决它。

我对编程的世界并不陌生,我只是在做一个学校的项目,而Android Studio,作为我正在使用的应用程序,我仍然在学习和适应。

任何帮助将是感激的,即使错误是在代码或模拟软件,我希望你明白,我仍然不是完全喜欢它。如果需要更多的代码,我可以这样做,但是,就像我说的,大部分代码都取自这个视频:https://www.youtube.com/watch?v=esDWSfBa-oc,所以这里有任何东西,当然除了前面提到的变化。

提前感谢!

错误日志显示

android.database.sqlite.SQLiteException: no such column: display_nameASC

这里ASC表示升序排序。您需要在列名和ASC

之间加一个空格
String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC";