今天写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. a+=b 等价于 a=a+b ?

    a += b和a = a + b全然等价么(java)?可能非常多人以为是一样的,事实上并不是等价的,以下看一下证据吧. public class Test { public static void ...

  2. 我在SharePoint行业的从业经历(一)

      大约10年前,我刚刚毕业的时候,找到了一个试用的机会.那个时候的我对软件根本没有概念.编程学的也非常少.仅仅是在系里学过一点VB和C++,以为软件就是像QQ或者游戏之类的.我从来没想到会认 ...

  3. 将 Android* Bullet 物理引擎移植至英特尔® 架构

    简单介绍 因为眼下的移动设备上可以使用更高的计算性能.移动游戏如今也可以提供震撼的画面和真实物理(realistic physics). 枪战游戏中的手雷爆炸效果和赛车模拟器中的汽车漂移效果等便是由物 ...

  4. 在 Win8.1 上安装 Dedup

    install-package Microsoft-Windows-ServerCore-FullServer-Package~31bf3856ad364e35~amd64~~6.3.9600.163 ...

  5. XXXfragment that is not a fragment错误,fragment认不出来

    要注意的是fragment事实上是有两个版本号的,一个是 import android.support.v4.app.Fragment; 另外一个是 import android.app.Fragme ...

  6. Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台

    Minikube之Win10单机部署 Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以 ...

  7. django 笔记14 中间件

    用户请求->中间件->urls->views->返回字符串->中间件->用户浏览器 settings MIDDLEWARE里面都是中间件 有的地方叫管道 请求来的时 ...

  8. 解析UML用例图中include与extend的区别

    UML用例图有很多值得学习的地方,这里向大家简单介绍一下UML用例图中include与extend的区别,希望本文的介绍对你有所帮助. 本文和大家重点讨论一下UML用例图中include与extend ...

  9. AngularJS 导航栏动态添加.active

    在传统jQuery中,实现导航栏动态添加.active类的思路比较简单,就是当点击的时候,清除其他.active,然后给当前类加上.active. 但是在AngularJS中,就不能再采用这种jQue ...

  10. Percona Monitoring and Management (PMM)安装使用

    一.docker安装 参考:http://www.cnblogs.com/liuyongsheng/articles/6595353.html 二.Percona Monitoring and Man ...