Android 如果我没有';你不知道现在的情况吗?

Android 如果我没有';你不知道现在的情况吗?,android,dialog,android-context,Android,Dialog,Android Context,作为后台http操作的结果,我必须在前台活动中显示一个对话框 当对话框出现时,它可能无处不在,上下文可以更改,例如,我开始了一项新活动 如果我使用applicationContext显示我得到的对话框: 05-04 17:32:32.560:E/AndroidRuntime(3663): android.view.WindowManager$BadTokenException:无法添加窗口-- 令牌null不适用于应用程序 所以。。。我怎样才能达到我的目标 有什么建议吗?无论何时何地创建对话框,

作为后台http操作的结果,我必须在前台活动中显示一个对话框

当对话框出现时,它可能无处不在,上下文可以更改,例如,我开始了一项新活动

如果我使用applicationContext显示我得到的对话框:

05-04 17:32:32.560:E/AndroidRuntime(3663): android.view.WindowManager$BadTokenException:无法添加窗口-- 令牌null不适用于应用程序

所以。。。我怎样才能达到我的目标


有什么建议吗?

无论何时何地创建对话框,您都会在活动中,对吗?为什么不将该活动用作上下文

在我自己的代码中,我创建了一个帮助器类,它为我创建了一个对话框。我将当前活动、标题和消息传递到该助手类中。它构造对话框并返回我可以管理的AlertDialog对象


您可以尝试这样做,但是您仍然需要知道您希望对话框显示的上下文/活动。

您需要一种方法来通知前台活动操作已完成,您可以通过注册一个侦听器来完成此操作,因为您没有发布任何代码,我将做出假设

我知道有两种方法可以通知前台活动,第一种方法是使用广播意图,这里有一个关于它们的问题。您可以从后台操作触发广播意图,并将您的活动注册为接收器

看看这里和这里

第二种方法是向执行后台操作的类注册侦听器,例如(伪代码)

您的侦听器可以是这样的(您的活动可以实现):


这里的想法是,您的前台活动将是当前注册的侦听器,因此它将是onOperationComplete(…)回调的接收者,然后您可以显示您的对话框,即。。。操作完成后,可以向活动传递任意数量的参数。

我认为您需要的是获取任务的顶部活动(当前显示活动),然后使用它显示对话框

因此,请参见以下线程:


编辑:从后台显示一个对话框不是一个好的用户体验,你可以发送通知或只是做一个长时间的祝酒词。

在我看来,最好的方法是创建一个新的活动,并像使用对话框一样使用它。 步骤如下:

  • 创建新活动,例如(作为原始活动)MainActivity

  • 根据需要填写相关的activity_main.xml

  • 在您的AndroidManifest.xml文件中,重新编写以下行

    <activity
            android:theme="@style/AppTheme.Dialog"
            android:name="com.myapp.original.example"
            android:label="@string/timy_titlle" >
    

    这里有一个类似的问题:您看到我的答案了吗?不,我看不到,因为在等待后台结果(使用处理程序)时,我可以启动一个新的活动来更改当前上下文。上一个活动的处理程序不能在处理程序所在的活动(您的解决方案)中显示对话框,而是在新的活动中显示对话框。问题是。。。如何知道哪个是前台活动?好的,我已经更新了我的答案,以便活动在onResume和onPause中注册,这将确保只有前台活动从后台操作中得到回调,希望这会有所帮助。顺便说一下,如果您正在进行web请求,我强烈建议您查看Virgil Dobjanschi的Google IO REST演示,他描述了一个类似的方法(关于他的Service Helper类)
    interface BackgroundOperatorListener {
        void onOperationComplete(...);
    }
    
    <activity
            android:theme="@style/AppTheme.Dialog"
            android:name="com.myapp.original.example"
            android:label="@string/timy_titlle" >