使用 MultiDexApplication 会导致 applicationContext 变为 null

Lun*_*box 6 android android-multidex

我已按照此链接中的说明将我的应用程序切换到 MultiDexApplication - https://developer.android.com/studio/build/multidex.html

应用程序现在安装正确,但我的应用程序上下文为空。你们有没有经历过这样的事情?

如果您需要代码示例,请告诉我,但由于应用程序因无法获取应用程序上下文而崩溃,因此我想不出任何可以解释该问题的代码。

获取我的应用程序上下文如下:

TrackerApplication.getContext();


public class TrackerApplication extends MultiDexApplication {

private static Context context;

public TrackerApplication() {
    super();
    context = this;
}

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, new Crashlytics());
}

public static Context getContext() {
    return context;
}
}
Run Code Online (Sandbox Code Playgroud)

然后当我打电话时:

TrackerApplication.getContext().getSharedPreferences("MySettings",
            Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

我得到一个空指针。我的应用程序上下文为空。

添加了一个测试来解释这个问题。在我的 Launch 活动中,我添加了以下代码:

if (TrackerApplication.getContext() == null) {
        Log.i("TEST", "Context is null");
    } else {
        Log.i("TEST", "What is the issue?");
    }
Run Code Online (Sandbox Code Playgroud)

LogCat 总是打印出来Context is null

Lun*_*box 0

最终通过执行以下操作解决了此问题:1-从应用程序中完全删除了 multidex 代码。2-清理项目。3-已建项目。4-再次将所有 multidex 代码添加到项目中。5-再次清理并重建项目。6- 之后就开始工作了..

不知道为什么第一次不起作用,但现在可以正常工作了。