我创建了一个类,其中包含一些我常用的东西,例如吐司或对话框。我将此类命名为MyUtils。我在MyUtils中包含以下代码行。其中subYesNoDialogResult是布尔类型的私有变量。

public void subYesNoDialog(Context appctx,String title,String mymessage)    {
   AlertDialog.Builder builder = new AlertDialog.Builder(appctx);
   builder.setMessage(mymessage)
     .setTitle(title)
     .setCancelable(false)
     .setPositiveButton(android.R.string.yes,
       new DialogInterface.OnClickListener(){
         public void onClick(DialogInterface dialog, int id) {
           subYesNoDialogResult = true;
         }
     })
     .setNegativeButton(android.R.string.no,
       new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int id) {
           subYesNoDialogResult = false;
           dialog.cancel();
         }
     });
     AlertDialog alert = builder.create();
     alert.show();
}


我还有另一个班级,该班级出于某些目的用于帮助主要活动班级。我将此类称为MyDbHelper。我试图调用上述函数以显示“是/否”对话框。这是为了在MyDbHelper类中进行某些处理之前让用户输入做出决定。但是我这样做会得到NullPointerException。这是我的日志猫。

I/ActivityManager(   67): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.xxx.geolog/.GeologActivity }
D/AndroidRuntime(  676): Shutting down VM
D/dalvikvm(  676): Debugger has detached; object registry had 1 entries
I/ActivityManager(   67): Start proc com.xxx.geolog for activity com.xxx.geolog/.GeologActivity: pid=683 uid=10040 gids={}
I/AndroidRuntime(  676): NOTE: attach of thread 'Binder Thread #3' failed
D/dalvikvm(   33): GC_EXPLICIT freed 244 objects / 9464 bytes in 704ms
D/dalvikvm(   33): GC_EXPLICIT freed 2 objects / 64 bytes in 350ms
D/dalvikvm(   33): GC_EXPLICIT freed 2 objects / 48 bytes in 536ms
W/GpsLocationProvider(   67): Duplicate add listener for uid 10040
W/WindowManager(   67): Attempted to add window with non-application token WindowToken{44f7d2a0 token=null}.  Aborting.
D/AndroidRuntime(  683): Shutting down VM
W/dalvikvm(  683): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime(  683): FATAL EXCEPTION: main
E/AndroidRuntime(  683): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
E/AndroidRuntime(  683):    at android.view.ViewRoot.setView(ViewRoot.java:509)
E/AndroidRuntime(  683):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
E/AndroidRuntime(  683):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
E/AndroidRuntime(  683):    at android.app.Dialog.show(Dialog.java:241)
E/AndroidRuntime(  683):    at com.xxx.geolog.SubLocationListener.onProviderDisabled(SubLocationListener.java:33)
E/AndroidRuntime(  683):    at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:204)
E/AndroidRuntime(  683):    at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:124)
E/AndroidRuntime(  683):    at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:140)
E/AndroidRuntime(  683):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  683):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  683):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  683):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  683):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  683):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  683):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  683):    at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(   67):   Force finishing activity com.xxx.geolog/.GeologActivity
W/ActivityManager(   67): Activity pause timeout for HistoryRecord{45030820 com.xxx.geolog/.GeologActivity}


我怎样才能解决这个问题?我做错什么了吗?

最佳答案

您是否在尝试使用应用程序上下文显示对话框?
如果是这样,请尝试使用活动上下文,以查看它是否有所作为。

07-24 09:49
查看更多