为啥 Application.getContext() 返回 null? [复制]

Posted

技术标签:

【中文标题】为啥 Application.getContext() 返回 null? [复制]【英文标题】:Why does Application.getContext() return null? [duplicate]为什么 Application.getContext() 返回 null? [复制] 【发布时间】:2019-11-17 20:12:25 【问题描述】:

您好,我正在实现 SDK,我需要一些代码的上下文,因此,为了访问上下文,我在 Application 类中实现了它:

public class SDKApp extends Application 

    private static SDKApp sdkContext;

    public static Context getContext() 
        return sdkContext;
    

    @Override
    public void onCreate() 
        super.onCreate();

        sdkContext = this;

    


为了对此进行测试,我使用的是 Robolectric,但上下文返回的是空值:

@RunWith(RobolectricTestRunner.class)
public class CallTest 

    private Context context = RuntimeEnvironment.application;

    @Test
    public void emailAuthenticationSuccessfulTest() 
        if (BuildConfig.FLAVOR.equals("dev")) 

            Context context = SDKApp.getContext();

            assertNotNull(context);
        
    

对此有什么想法?

谢谢

【问题讨论】:

【参考方案1】:

像这样将你的 SDKApp 类添加到你的清单应用程序标签中

<application
        android:name="SDKApp" // your complete package path to your SDKApp
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

【讨论】:

【参考方案2】:

确保您的SDKApp 已在AndroidManifest.xml 中注册,例如

<application
    android:name="SDKApp"

然后你可以调用SDKApp.getContext() 否则你总是从SDKApp.getContext() 得到空值

谢谢。

【讨论】:

以上是关于为啥 Application.getContext() 返回 null? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?