创建新对话框时出现 NullPointerException

2024-04-14

我有一个 DialogFragment,它创建一个列表视图对话框,并在列表项上单击“我想显示一个警报对话框”,但是当我创建该对话框时,它给了我一个NullPointerException出现我以前从未见过的错误

08-05 11:40:42.315: E/AndroidRuntime(4693): java.lang.NullPointerException
08-05 11:40:42.315: E/AndroidRuntime(4693):     at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at com.tyczj.bowling.dialogs.SeasonType$1$1.onClick(SeasonType.java:60)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at android.os.Looper.loop(Looper.java:137)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at android.app.ActivityThread.main(ActivityThread.java:4745)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at java.lang.reflect.Method.invokeNative(Native Method)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at java.lang.reflect.Method.invoke(Method.java:511)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-05 11:40:42.315: E/AndroidRuntime(4693):     at dalvik.system.NativeStart.main(Native Method)

这是我的对话框onCreate

@Override
public Dialog onCreateDialog(Bundle state){
    final Dialog d = new Dialog(getActivity());
    d.setContentView(R.layout.dialog_layout);
    d.setTitle("Select a season");
    ListView lv = (ListView)d.findViewById(R.id.dialog_list);
    String[] list = getResources().getStringArray(R.array.season_dialog_type);
    lv.setAdapter(new ArrayAdapter<String>(getActivity(),R.layout.stats_list_layout,list));
    lv.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
            d.dismiss();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            if(arg2 == 0){
                DialogFragment df = new SeasonsDialog(true);
                df.show(ft,null);
            }else if(arg2 == 1){
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                final View v = getActivity().getLayoutInflater().inflate(R.layout.add_season_layout, null, false);
                builder.setTitle("Add a season").setView(v).setPositiveButton("Add", new OnClickListener(){

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        arg0.dismiss();
                        AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity()); //Error here
                        builder2.setTitle("Warning!").setMessage("Adding a new season will cause all new games to be under this season.\n\n Do you wish to continue?")
                        .setPositiveButton("Yes", new OnClickListener(){

                            @Override
                            public void onClick(DialogInterface dialog,int which) {
                                dialog.dismiss();
                                EditText et = (EditText)v.findViewById(R.id.editText1);
                                ContentValues values = new ContentValues();
                                values.put(Games.SEASON, et.getText().toString());
                                Uri uri = getActivity().getContentResolver().insert(Games.SEASONS_URI, values);
                                et.setText("");
                                SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity());
                                SharedPreferences.Editor edit = pref.edit();
                                edit.putLong(Preferences.SELECTED_SEASON, ContentUris.parseId(uri)).commit();
                            }

                        }).setNegativeButton("No", new OnClickListener(){

                            @Override
                            public void onClick(DialogInterface dialog,int which) {
                                dialog.dismiss();
                            }

                        }).create().show();
                    }

                }).setNegativeButton("Cancel", new OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }

                }).create().show();
            }

        }

    });

    return d;
}

我的这一行出现错误onClick

AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity());

这个错误是什么意思?


这可能是因为您尝试从 onClick 侦听器中调用 getActivity()。通常,匿名内部类喜欢只访问那些final。在创建监听器之前尝试做类似的事情

final Context context = getActivity();

然后在崩溃的行上使用 context 而不是 getActivity() 。

并作为注释。我会用对话框片段 http://developer.android.com/reference/android/app/DialogFragment.html这里。它可以更好地管理对话框的生命周期。当您在对话框打开时尝试旋转屏幕时,您会遇到问题。然而,使用 DialogFragment 它会为你处理这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建新对话框时出现 NullPointerException 的相关文章

  • android 网格视图从右到左放置项目

    我正在开发一个 Android 应用程序阿拉伯文版本 在其中一个界面中 我有 gridView 因此 要以正确的顺序显示项目 我必须从右到左显示 GridView 中的项目 当然是从上到下 为此 我尝试在 GridView 中添加这些属性
  • 有没有办法有一个屏蔽数字输入字段?

    我正在 Android 上创建一个 HTML5 应用程序 对于这个特定场景 我们有一个用于信用卡安全代码的输入字段 我们希望强制输入字段仅包含数字并被屏蔽 我没有运气搜索这个特定的案例 从我自己研究 尝试中可以看出 这不能纯粹通过 HTML
  • 创建后如何更新使用 AlertDialog.builder 构建的 AlertDialog 列表中的项目数组

    我使用 AlertDialog builder 创建了一个对话框 显示可以检查的多项选择列表 我设置了初始的项目名称集及其检查状态 builder setMultiChoiceItems saveTargets names saveTarg
  • android中.so文件的实际用途是什么? [复制]

    这个问题在这里已经有答案了 我想在我的应用程序中实现类似聊天的环聊 我一直在使用 opentok 库 我在其中看到了 libopentok so 文件 谁能告诉我 libopentok so 文件的确切用法是什么 在Android中 我们可
  • 加载内容时在 ImageView 中使用“动画圆圈”

    我目前在我的应用程序中使用一个列表视图 可能需要一秒钟才能显示 我目前所做的是使用列表视图的 id android empty 属性来创建 正在加载 文本
  • Firebase 云消息传递 - 目标到 Firebase 控制台中不可见的单个设备

    我正在尝试向 android 中的单个设备发送通知 但是当我从 Firebase 控制台执行此操作时 它在 Firebase 新视图中不可见 谁能帮助我从哪里向单个设备发送通知 仔细尝试以下步骤 Tap 新通知 Fill up 通知标题 可
  • 为什么 Android Eclipse 不断刷新外部文件夹并花费很长时间?

    我只有一部新的 Android 手机 我一直在修补一些基本的应用程序 每当我保存任何内容时 Eclipse 的 Android 插件就会刷新外部文件夹 这让我抓狂 通常我不会介意 但当需要 10 秒才能刷新时 我开始注意到 我已经搜索过 其
  • 没有 GUI 的 Android Activity

    我创建了一个仅从链接启动的活动 使用意图过滤器 我不希望此活动有 GUI 我只希望它启动服务并在栏中放置通知 我尝试将链接的意图过滤器放入我的服务中 但这不起作用 有没有更好的方法可以响应意图过滤器 或者我可以让我的活动没有 GUI 吗 抱
  • ViewPagerIndicator:TabPagerIndicator 不可见

    我现在正在为 viewpageinderdicator 苦苦挣扎 当我使用 TitlePageIndicator 时 一切正常 但是当我尝试使用 TabPageIndicator 时我看不到它 它不会出现在层次结构视图中 我尝试了很多东西
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • 在 Android 模拟器中获取互联网连接

    我有一台带有wifi连接的台式电脑 我的IP地址是192 168 12 95 网关是192 168 10 10 但是我在android模拟器中没有获得互联网连接 也就是说我无法访问internate 我也尝试过 emulator avd w
  • Facebook 好友请求 - 失踪好友

    我请求从我正在开发的 Android 应用程序中获取用户好友 从 Facebook Api V2 0 开始 我知道我应该只获取已经通过我的应用程序登录的用户好友 但是 尽管我知道用户的某些朋友已通过我的应用程序登录 但在请求该用户的朋友时
  • Firestore OncompleteListener [重复]

    这个问题在这里已经有答案了 我想看看这段代码的执行有什么错误 当我编译它时 它只返回 log 1 3 2 的值 并且我希望 log2 在 3 之前 Log d 1 antes de validar DocumentReference doc
  • Android - 带动画的可扩展 TextView

    我有一个TextView首先显示长文本的一小部分 用户可以按 查看更多 按钮来展开TextView并查看该文本的其余部分 进行测试 我可以通过简单地交换以下值来实现这一点TextView setMaxLines介于 4 之间 用于折叠 和
  • Android 10 通知彩色操作按钮

    I m trying to color the buttons Action in Notification like this So far this is what i m achieved so far 下面是我正在使用的代码 通知服
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • Android Webview:无法调用确定的可见性() - 从未见过 pid 的连接

    我有一个 Android Webview 当我单击链接下载文件 pdf 图像等 时 我收到一条错误消息 Error message Cannot call determinedVisibility never saw a connectio
  • SubscriptionManager 用于读取运行 Android 5.1+ 的双 SIM 设备的 IMSI

    对于 API 22 我尝试使用 SubscriptionManager 读取双 SIM 卡 IMSI IMSI 是 14 到 15 个字符 格式如下 MCC MNC MSIN MCC 移动国家 地区代码 例如 美国为 310 MNC 移动网
  • 允许使用 SurfaceTexture 在 GLSurfaceView 渲染器中进行多通道渲染

    我正在显示视频GLSurfaceView使用需要连续应用多个着色器的自定义渲染器 目前 它可以成功地使用一个着色器 但我不确定如何扩展渲染管道以连续应用多个着色器 我知道有一些关于应用多个着色器的示例 使用FrameBuffers and

随机推荐