创建对话框时Logcat会抛出错误“令牌Null不适用于应用程序”

时间:2014-05-24 12:03:16

标签: android dialog alertdialog android-alertdialog

根据logcat输出,应用在创建Dialog时崩溃。我尝试将变量reportAlertDialog更改为AlertDialog类型但我发现,某些功能/属性不可用,例如setcontentView,但是当变量属于类型时可用Dialog。无论如何,应用程序此时崩溃,logcat输出相当难以理解。有什么建议吗?

JavaCode:

private void report(Bundle thisActivityBundle) {
            ...
                            ...
            if ( (reportAlertDialog != null) && (reportAlertDialog.isShowing()) ) {
                reportAlertDialog.cancel();
                Log.i(CURRENT_ACTIVITY, "@report(): reportAlertDialogue Was Showing And Now Is Canceled");
            }

            String sortedKeys[] = {LOC_NAME_KEY, LOC_LAT_KEY, LOC_LNG_KEY, LOC_TIME_KEY, LOC_DATE_KEY, IMG_TITLE_KEY, IMG_PATH_KEY};
            String bundleVals [] = new String[sortedKeys.length];

            for (int i=0; i<sortedKeys.length; i++) {
                if (thisActivityBundle.containsKey(sortedKeys[i])) {
                    bundleVals[i] = thisActivityBundle.getString(sortedKeys[0]).toString();
                }else {
                    bundleVals[i] = "NULL";
                }
            }

            reportAlertDialog = new Dialog(getApplicationContext());
            LayoutInflater reportAlertDialogLayoutInflater = LayoutInflater.from(getApplicationContext());
            View reportAlertDialogInflatedView = reportAlertDialogLayoutInflater.inflate(R.layout.report_dialog, null);

            reportAlertDialog.setContentView(reportAlertDialogInflatedView);

            int [] viewsRefsIds = {R.id.reportLocNameValue, R.id.reportLocLatValue, R.id.reportLocLngValue, R.id.reportTimeValue,
                    R.id.reportDateValue, R.id.reportImgTitleValue, R.id.reportImgPathValue
            };
            TextView [] viewsVars = new TextView[viewsRefsIds.length];

            TextView reportAlertDialogMSG = (TextView) reportAlertDialog.findViewById(R.id.reportDialogMessageID);
            reportAlertDialogMSG.setText(REPORT_ALERT_DIALOG_MSG);

            for (int i=0; i<bundleVals.length; i++) {
                viewsVars[i] = (TextView) reportAlertDialog.findViewById(viewsRefsIds[i]);
                viewsVars[i].setText(bundleVals[i]);
            }

            reportAlertDialog.show();

        }

logcat的:

05-24 08:06:01.317: E/AndroidRuntime(2396): FATAL EXCEPTION: main

05-24 08:06:01.317:E / AndroidRuntime(2396):处理:com.example.meetingpointlocator_03,PID:2396 05-24 08:06:01.317:E / AndroidRuntime(2396):android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.view.ViewRootImpl.setView(ViewRootImpl.java:540) 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.app.Dialog.show(Dialog.java:286) 05-24 08:06:01.317:E / AndroidRuntime(2396):at com.example.meetingpointlocator_03.MeetingPointFix $ 4.report(MeetingPointFix.java:307) 05-24 08:06:01.317:E / AndroidRuntime(2396):at com.example.meetingpointlocator_03.MeetingPointFix $ 4.onClick(MeetingPointFix.java:240) 05-24 08:06:01.317:E / AndroidRuntime(2396):at com.android.internal.app.AlertController $ ButtonHandler.handleMessage(AlertController.java:166) 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.os.Handler.dispatchMessage(Handler.java:102) 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.os.Looper.loop(Looper.java:136) 05-24 08:06:01.317:E / AndroidRuntime(2396):在android.app.ActivityThread.main(ActivityThread.java:5017) 05-24 08:06:01.317:E / AndroidRuntime(2396):at java.lang.reflect.Method.invokeNative(Native Method) 05-24 08:06:01.317:E / AndroidRuntime(2396):at java.lang.reflect.Method.invoke(Method.java:515) 05-24 08:06:01.317:E / AndroidRuntime(2396):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 05-24 08:06:01.317:E / AndroidRuntime(2396):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-24 08:06:01.317:E / AndroidRuntime(2396):at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

尝试将对话框的参数设置为此活动

    reportAlertDialog = new Dialog(YourActivityName.this);

我认为它会奏效。