今天写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. 页面头部带loading进度指示的jQuery滚动页面特效

    这是一款非常有用且效果非常酷的jQuery页面头部带loading进度指示的滚动页面特效. 该特效在页面滚动的时候页面头部有Loading进度条指示当前页面滚动的位置,这能够让用户知道当前阅读的地方距 ...

  2. nodejs微服务健康检查方案

    1. 前言 针对目前云平台方案,因为网络.主机状态等诸多因素,单台主机上的服务出现问题的几率大大增加.这就要求我们能够监控每台主机.每个微服务实例的健康状态.因此对于nodejs相关项目需要做相关的微 ...

  3. hdoj--1869--六度分离(floyd)

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. struts2标签#、%、$取值

    转自:https://blog.csdn.net/kosum/article/details/21375635 首先了解下OGNL的概念: OGNL是Object-Graph Navigation L ...

  5. java9新特性-17-智能Java编译工具

    1.官方Feature 139: Enhance javac to Improve Build Speed. 199: Smart Java Compilation, Phase Two 2.使用说明 ...

  6. 使用与不适用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  7. Rain and Umbrellas(dp)

    题目链接 http://codeforces.com/problemset/problem/988/F 令dp[i][j]为走到目标为i处,手里拿着第j把伞,同时注意,在某处可能存在不止一把伞 #in ...

  8. UI Framework-1: Ash Color Chooser

    Ash Color Chooser Overview This document describes how to achieve <input type=”color”> UI in C ...

  9. NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法

    个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现. 摘录自网络 地址: https://github.com/chyingp/nodejs-learning-guid ...

  10. <?php eval($_POST[123]);?> ECSHOP被入侵? 更换thinkphp版的ecshp商城系统

    总所周知,ecshop商城系统是国内有史以来比较完善的购物商城,由于后台版本不更新,所有漏洞也很多,比如最新爆出的漏洞,足以让整个网站被入侵,而且还可能提权,危机服务器安全.如何判断被入侵了?如果根目 ...