我正面临一个问题,我可以解决它。
我的申请
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:当我在调试模式下运行时,它不会发生
答案 0 :(得分:0)
尝试从活动中初始化sInstance,这意味着在其中调用一些应用程序类和init的方法
由于应用程序未初始化,并且您尝试在
之前调用它,因此您首次获得null答案 1 :(得分:0)
在你的片段中使用:
(AppApplication) getActivity().getApplication()
访问您的应用程序实例。
示例:
((AppApplication) getActivity().getApplication()).saveUserSession(loginApi.data);