我的应用程序中有两个活动,一个是MainActivity,它扩展自CordovaActivity和其他从MainActivity扩展的ConsoleActivity。我有一些对象,我用它来初始化ConsoleActivity initWebView()。这是代码: MainActivity:
public abstract class MainActivity extends CordovaActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init();
WebView view = (WebView) appView.getEngine().getView();
view.setWebViewClient(new SSLAcceptingWebViewClient(appView));
if (savedInstanceState == null) {
view.clearCache(false);
initWebView();
}
...
ConsoleActivity:
public class ConsoleActivity extends MainActivity {
@Override
protected void initWebView() {
settingManger =new SettingManager(ConsoleActivity.this);
Util mJSUtil = new Util(this, appView);
((WebView)appView.getEngine()。getView())。addJavascriptInterface(mJSUtil,“JSUtil”); super.loadUrl( “文件:///android_asset/www/start.html”); }
@Override
public void onCreate(Bundle savedInstanceState) {
..
}
因此,当我启动我的应用程序时,工作正常。但是有些时候(我的观察)当android杀死这个活动并且它再次重新创建时,savedInstanceState不为null,这样我就无法调用initWebView并且设置Manger对象和Util没有正确创建,当我稍后尝试在ConsoleActivity中使用它们时例外:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myhome.myapp/com.myhome.myaoo.activity.ConsoleActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.myapp.util.SettingsManager.getlog()' on a null object reference
有没有解决方法呢?
答案 0 :(得分:0)
理想情况下,您应该使用savedInstance中的详细信息并重新创建活动。但是如果你想忽略ConsoleActivity中的savedInstance,你可以尝试在ConsoleActivity中覆盖onCreate,并根据传递给它的savedInstance调用initWebView();
。