今天写android实验碰到到一个问题,在用AlertDialog.Builder类构建一个对话框之后,调用Builder.show()方法时抛出异常如下:

- ::16.456 -/xyz.qlrr.sqliteapp W/System.err: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
- ::16.457 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:)
- ::16.457 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:)
- ::16.457 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:)
- ::16.457 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:)
- ::16.457 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AlertController.installContent(AlertController.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.app.Dialog.dispatchOnCreate(Dialog.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.app.Dialog.show(Dialog.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at xyz.qlrr.sqliteapp.DisplayActivity.onItemClick(DisplayActivity.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.widget.AdapterView.performItemClick(AdapterView.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.widget.AbsListView.performItemClick(AbsListView.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.widget.AbsListView$PerformClick.run(AbsListView.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.widget.AbsListView.onTouchUp(AbsListView.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.widget.AbsListView.onTouchEvent(AbsListView.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.View.dispatchTouchEvent(View.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:)
- ::16.458 -/xyz.qlrr.sqliteapp W/System.err: at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.app.Activity.dispatchTouchEvent(Activity.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.View.dispatchPointerEvent(View.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.ViewRootImpl$ColorWindowInputEventReceiver.onInputEvent(ViewRootImpl.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:)
- ::16.459 -/xyz.qlrr.sqliteapp W/System.err: at android.os.MessageQueue.nativePollOnce(Native Method)
- ::16.460 -/xyz.qlrr.sqliteapp W/System.err: at android.os.MessageQueue.next(MessageQueue.java:)
- ::16.460 -/xyz.qlrr.sqliteapp W/System.err: at android.os.Looper.loop(Looper.java:)
- ::16.460 -/xyz.qlrr.sqliteapp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:)
- ::16.460 -/xyz.qlrr.sqliteapp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
- ::16.460 -/xyz.qlrr.sqliteapp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
- ::16.460 -/xyz.qlrr.sqliteapp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)

上网百度查找答案说是因为活动是继承了android.support.v7.app.AppCompatActivity,而且主题设置为了和这个活动父类不兼容的主题。我查看代码不是这个原因。后来发现在创建AlertDialog.Builder()的使用调用的上下文是用getApplicationContext()方法获取的,将上下文改为当前的活动对象this问题就解决了。

修改前:

 AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setMessage("确认").setMessage("您确定要删除这条记录吗?");
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
TextView idView = (TextView) view.findViewById(R.id.idView);
String s = idView.getText().toString();
Integer id = Integer.valueOf(s);
SQLiteHelper sqLiteHelper = new SQLiteHelper(getApplicationContext());
boolean b = sqLiteHelper.delete(id);
Toast.makeText(DisplayActivity.this,b?"删除成功":"删除失败",Toast.LENGTH_SHORT).show();
if(b){
loadlistview();
}
}
});
builder.setPositiveButton("取消",null);
builder.show();

修改后:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("确认").setMessage("您确定要删除这条记录吗?");
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
TextView idView = (TextView) view.findViewById(R.id.idView);
String s = idView.getText().toString();
Integer id = Integer.valueOf(s);
SQLiteHelper sqLiteHelper = new SQLiteHelper(getApplicationContext());
boolean b = sqLiteHelper.delete(id);
Toast.makeText(DisplayActivity.this,b?"删除成功":"删除失败",Toast.LENGTH_SHORT).show();
if(b){
loadlistview();
}
}
});
builder.setPositiveButton("取消",null);
builder.show();

android对话框显示异常报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.的更多相关文章

  1. Python基础中所出现的异常报错总结

    今天我们来探索python中大部分的异常报错 首先异常是什么,异常白话解释就是不正常,程序里面一般是指程序员输入的格式不规范,或者需求的参数类型不对应,不全等等. 打个比方很多公司年终送苹果笔记本,你 ...

  2. android studio :com.android.support:appcompat-v7:21.+ 报错

    android studio :com.android.support:appcompat-v7:21.+ 报错: 在project——>app——>build.gradle修改: app ...

  3. saiku中过滤窗口优化及隐藏异常报错

    问题一:当取消自动查询后,点击该维度应弹出过滤条件窗口,实际无反应,只有执行一次查询后再点击该维度,才能弹出过滤条件窗口 解决办法:打开WorkspaceDropZone.js文件,找到selecti ...

  4. OpenGL——外部读档+异常报错

    从外部读取shader文件: 先添加Shader类: 再创建vertexSource.txt和fragmentSource.txt两个文件: 如图填入shader: 在shader.h宣告: 在sha ...

  5. android studio java工程 报错

    作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com  android studio java工程 ...

  6. Android导入依赖appcompat-v7报错

    Android导入依赖appcompat-v7报错   导入appcompat-v7时报错了 导入的是implementation 'com.android.support:appcompat-v7: ...

  7. 关于新建android项目时 appcompat_v7报错问题的一点总结

    说下我的解决方案: 1.确保 appcompat项目的 target版本 低于 实际项目的android版本(就像.net中 低版本的 framewrok项目不能引用高版本framework项目一样) ...

  8. Xamarin Android真机测试报错

    Xamarin Android真机测试报错   Xamarin Android真机测试报错,错误信息为INSTALL_CANCELLED_BY_USER.出现这个错误,通常都是真机上开发者选项设置错误 ...

  9. Android Studio support 26.0.0-alpha1 Failed to resolve: com.android.support:appcompat-v7:27.+ 报错解决方法

    AS下如何生成自定义的.jks签名文件, 以及如何生成数字签名 链接:http://www.cnblogs.com/smyhvae/p/4456420.html 链接:http://blog.csdn ...

随机推荐

  1. 想做web前端project师应该学习些什么?

    偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做w ...

  2. JS学习笔记-数据类型

    最初的JS学习已经过去大半年的时间了,至此感觉对JS的使用与理解并非非常深入,因此在近期的工作之余也開始了新一轮的JS学习. 几天时间过去了,对于一些基础内容的学习还是非常有必要的,就从今天的又一次整 ...

  3. Opencv(3.0.0beta)+Python(2.7.8 64bit) 简单具体,一遍成功

    看到非常多配置的文章,都没法正常走完流程 使用到的资源,都是今天为止最新的: python-2.7.8.amd64.msi opencv-3.0.0-beta.exe numpy-MKL-1.9.1. ...

  4. rest_framework-节流-总结完结篇

    列表从后往前读 #1.在request中获取IP#2.访问记录 VISIT_RECORD = {} 放缓存 数据库 都可以 建议缓存import timeclass VisitThrottle(obj ...

  5. SecondaryNameNode合并元信息过程

  6. OpenCV问题集锦,图片显示不出来的问题,cvWaitKey(0),不能读图片,未经处理的异常,等问题集合

    昨天根据uc伯克利的人工图像分割文件.seg,显示图像的时候调用了OpenCV的库函数,图片都能用imwrite写好,但是imshow死活显示不出来. 今天早上发现原来是imshow()后面应该加上: ...

  7. Oracle中根据表明获取对应表触发器名称

    Select object_name From user_objects a left join all_triggers b on a.object_Name = b.trigger_name wh ...

  8. <Sicily> Longest Common Subsequence

    一.题目描述 Given a sequence A = < a1, a2, -, am >, let sequence B = < b1, b2, -, bk > be a s ...

  9. vue 中使用querySelect 封装的万能选择器

    function query (el) { if (typeof el === 'string') { var selector = el; el = document.querySelector(e ...

  10. ACM训练联盟周赛(第三场)

    A.Teemo's bad day Today is a bad day. Teemo is scolded badly by his teacher because he didn't do his ...