应用程序getInstance返回null

时间:2016-02-20 19:26:42

标签: android singleton

我正面临一个问题,我可以解决它。

我的申请

public class AppApplication extends Application {

    public static AppApplication sInstance;

    public static User mUser;

    public static AppApplication getInstance() {
        return sInstance;
    }

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

        sInstance = this;
        mUser = restoreUserFromSession();

        ReportUtils.getsInstance(this).resendCachedReport();

    }
    /**
     * Restore logged user stored on session
     * @return
     */
    public User restoreUserFromSession(){
        return UserSession.getInstance(this).restoreUser();
    }
}

我的清单

<application
        android:name=".AppApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
.
.
.
</application>

在我的片段中,我有那个functino

public void doLogin(RestParams params) {
        RestClient.getApi(getActivity(), getActivity()).doLogin(params.getParams(), new RestCallback<LoginApi>() {
            @Override
            public void failure(RestError restError) {
                hideProgress();
                LOGI(TAG, restError.getStrMessage());
                DialogUtils.getInstance().showOkDialog(getActivity(),
                        getString(R.string.str_warning),
                        restError.getStrMessage());
            }

            @Override
            public void successApi(final LoginApi loginApi, Response response) {
                loginApi.data.email = mEditEmail.getText().toString();

                if(AppApplication.getInstance() != null) {
                    AppApplication.getInstance().saveUserSession(loginApi.data);
                } else {
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            AppApplication.getInstance().saveUserSession(loginApi.data);
                            LogUtils.setCrashUser(loginApi.data.name);
                        }
                    }, 1000);
                }
                mListener.goToMain();

                GcmUtils gcm = new GcmUtils(getActivity(), getActivity());
                gcm.registerInBackground();
            }
        });
    }

我的问题是,当我第一次启动应用程序时,AppApplication.getInstance()返回null,当我再次打开应用程序时,一切正常,我不知道出了什么问题。

---- ---- EDITED

我的问题是,在应用程序的onCreate之前第一次调用Activity的onCreate,这只发生在Nexus 9 - API 23中。

Obs:当我在调试模式下运行时,它不会发生

2 个答案:

答案 0 :(得分:0)

尝试从活动中初始化sInstance,这意味着在其中调用一些应用程序类和init的方法

由于应用程序未初始化,并且您尝试在

之前调用它,因此您首次获得null

答案 1 :(得分:0)

在你的片段中使用:

(AppApplication) getActivity().getApplication()

访问您的应用程序实例。

示例:

((AppApplication) getActivity().getApplication()).saveUserSession(loginApi.data);