安卓AVD模拟器运行APP提示[AppName] stopped working报错求助
你的崩溃和通讯录加载失败是两个独立问题,分别修复即可:
1 修复APP崩溃的语法错误
Logcat已经明确指出错误:no such column: display_nameASC,这是因为你拼接排序字段时漏掉了空格:
原来的代码:
String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+"ASC";
拼接后得到的字符串是display_nameASC,数据库会把整串当成字段名,找不到自然报错。
修改为:
String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC";
字段名和排序关键字ASC之间加空格即可解决崩溃问题。
2 关于getColumnIndex()和getColumnIndexOrThrow()的差异说明
高版本Android SDK中,getColumnIndex()找不到对应列时只会返回-1,不会抛出异常,但新版Android Studio的Lint规则会强制要求你处理返回-1的边界场景,否则就会触发编译警告/错误。你改用getColumnIndexOrThrow()的操作是完全正确的,不需要改回原写法,该方法会在找不到列时主动抛出异常,不需要额外处理返回值兼容。
3 通讯录无法加载的修复方案
3.1 权限配置
首先确认AndroidManifest.xml中已添加读取通讯录权限声明:
<uses-permission android:name="android.permission.READ_CONTACTS" />
安卓6.0及以上系统需要额外做动态权限申请,用户同意授权后再调用getContactList()方法读取通讯录。你也可以先手动打开模拟器的「设置」-「应用」-找到你的APP-「权限管理」,手动将通讯录权限设置为允许,验证功能是否正常。
3.2 模拟器添加测试联系人
不需要登录谷歌账号,直接打开模拟器系统自带的「通讯录」应用,点击右下角的+按钮即可手动添加测试联系人,添加完成后重启你的APP即可看到通讯录列表。
内容的提问来源于stack exchange,提问作者André_Almeida
相关产品推荐
相关产品推荐

