将活动上下文传递给Application类而不是Context

时间:2017-08-17 10:37:37

标签: java android android-context

如何将活动上下文传递给Application类我在传递getApplicationContext()时收到以下错误

                         at android.os.Handler.handleCallback(Handler.java:751)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                     at android.os.Looper.loop(Looper.java:154)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:6121)
                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
                                                                  Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
                                                                     at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:359)
                                                                     at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328)
                                                                     at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
                                                                     at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:83)
                                                                     at

2 个答案:

答案 0 :(得分:0)

  

错误不是因为它的上下文,因为您需要将appCompact主题分配给清单中的活动

类似这样的事情

  <activity
            android:name="com.pareekshum.sociallogin.SocialLoginActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:screenOrientation="portrait"
            android:theme="@style/AppThemeNew" />




<style name="AppThemeNew" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/actionbarbackground</item>
    <item name="actionBarStyle">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

答案 1 :(得分:0)

对于特定的窗口相关组件,您必须使用活动上下文而不是应用程序上下文。例如,您不能将“应用程序”上下文用于“警报”对话框,因为它是特定的窗口组件,它使用活动的主题和其他属性。

上下文与应用程序上下文

  

它们都是Context的实例,但应用程序实例是   绑定到应用程序的生命周期,而Activity实例   与活动的生命周期相关联。因此,他们可以访问   关于应用程序环境的不同信息。

     

如果您在getApplicationContext上阅读文档,则会注意到您应该这样做   只有在需要生命周期独立的上下文时才使用它   目前的背景。这不适用于您的任何一个示例。

     

活动上下文可能包含有关当前的一些信息   完成这些调用所必需的活动。如果你出示   确切的错误信息,可能能够指出它究竟需要什么。

     

但一般来说,除非你有充分的理由,否则请使用活动上下文   不要。

因此,如果您使用任何特定于窗口的内容或主题相关内容与应用程序上下文,则会抛出此错误。

Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

希望有所帮助:)