【问题标题】:"[AppName] stopped working" when I try to run my app on an AVD emulator当我尝试在 AVD 模拟器上运行我的应用程序时,“[AppName] 停止工作”
【发布时间】:2021-10-20 15:46:25
【问题描述】:

所以我正在开发一个应用程序,我做的第一件事就是创建一个联系人列表结构。这是我作为教程开始的视频: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);
    }

如果我删除 cursor.getColumnIndexOrThrow() 中的“OrThrow”指示,它会给我一个没有可见修复的错误,告诉我在线寻求反馈。考虑到我所做的一切都与视频中的完全一样,并且任何错误都是由于我尚未发现的一些错字或应用程序本身在库或预设调整方面有所不同,这很奇怪,我不确定全部。

观看完整视频并完成初始应用程序结构后,应用程序无法打开,并且在重新观看视频并认为我不得不拒绝联系人访问后(实际上并非如此,视频是只是显示如果我们拒绝允许访问会发生什么,因为显然需要联系人访问),它会起作用,但它当然不会显示联系人。

logcat 中的错误:

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,所以这里有什么,当然除了前面提到的变化。

提前致谢!

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: java android android-studio


【解决方案1】:

错误日志显示

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

这里ASC 用于升序排序。你需要在列名和ASC之间放一个空格@

  String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC";

【讨论】:

  • 感谢您的澄清!不过我有一个问题:考虑到这个文本前面是“Caused by:”,这是否意味着所有错误都跟着那个?只是问一下,所以我不再有同样的问题,因为很可能是这种情况,而且确实更有意义。
  • 基本上是的,你可以这么说。如果你看到你的堆栈跟踪,第一行也提到了它。 java.lang.RuntimeException: ... android.database.sqlite.SQLiteException: no such column: display_nameASC (code 1 SQLITE_ERROR): ..
  • 我明天去试试。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2012-09-22
相关资源
最近更新 更多