应用程序重新启动后的Android空白WebView



我的WebView有问题。当我使用Eclispe启动应用程序时,它在我的设备上运行良好(三星Galaxy S2,Android 4.1.2/API 16)。它加载我通过的网站 webview.loadUrl('my url');并且还掌握了一些JavaScript警报之类的东西。当我离开应用程序并重新启动它时,它只能再次工作一次。当我第二次重新启动应用程序时,它不会加载任何URL。我想它与 savedInstanceState 有关,但即使我在活动开始时将该捆绑包设置为 null,它也不会重新加载 URL。

protected void onCreate(Bundle savedInstanceState) {
    savedInstanceState=null;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    browser = (WebView) findViewById(R.id.browser);
...
    browser.loadUrl(url);
}

我还尝试删除所有饼干

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();

仍然有相同的错误。我已经阅读了很多关于Android中WebView的已解决的帖子和问题,但没有任何帮助。有没有波比知道?我很困惑...

整个创建方法:

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    savedInstanceState=null;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    browser = (WebView) findViewById(R.id.browser);
    //      if (savedInstanceState != null) {
    //          browser.restoreState(savedInstanceState);
    //      }
    /* JavaScript must be enabled if you want it to work, obviously */
    browser.getSettings().setJavaScriptEnabled(true);
    final Context myApp = this;
    final Communicator c = new Communicator();
    /* WebChromeClient must be set BEFORE calling loadUrl! */
    browser.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onJsAlert(WebView view, String url, String message,
                final android.webkit.JsResult result) {
            Log.d(TAG, "onJsAlert");
            try {
                JSONObject json = new JSONObject(message);
                if (json.has("func")) {
                    if (json.getString("func").equals("onUserInfos")) {
                        c.onUserInfos(json);
                        Log.d(TAG, "JSON verarbeitet");
                    }
                }
                return true;
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // TODO
            Log.v(TAG, "JavaScript Alert empfangen");
            new AlertDialog.Builder(myApp)
                    .setTitle("javaScript dialog")
                    .setMessage(message)
                    .setPositiveButton(android.R.string.ok,
                            new AlertDialog.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    result.confirm();
                                }
                            }).setCancelable(false).create().show();
            return false;
        };
    });
    // Reset all Cookies
    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
    /* load a web page which uses the alert() function */
    String url = c.getGuiURL();
    browser.loadUrl(url);
}

当您离开应用程序时,进程可能会继续运行。因此,当您返回到应用程序时,将调用 onResume 方法而不是 onCreate。

在 android 开发者网站上查看此页面,了解有关活动生命周期的更多信息http://developer.android.com/guide/components/activities.html

最新更新