【问题标题】:How to show webview when it's finished loading?加载完成后如何显示webview?
【发布时间】:2014-12-05 14:53:06
【问题描述】:

我正在开发一个安卓登录应用程序。登录后,用户将被重定向到 web 视图。目前一切正常,但是我想更改加载时显示的内容。

目前我使用ProgressDialog。我想我可以更改 setContentView()onPageFinished() 但这会导致 nullPointerException

这是当前的工作方法:

private void goToSite() throws IOException {

    //Create and start the 'loading' animation
    final ProgressDialog progDailog = ProgressDialog.show(this, "Gegevens       controleren","Een ogenblik geduld...", true);

    //Initialize the webview and set the contentView to display it
    String url=VarControl.DEFAULT_LINK;
    setContentView(R.layout.webview);
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new WebViewClient() {
        //This inner method dimisses the 'loading' dialog when the page is fully loaded
        public void onPageFinished(WebView view, String url) {
            progDailog.dismiss();
        }
    });

    //Collect the login data and post it to the server
    String postData = "token="+loadToken()+"&deviceid="+VarControl.regid+"&webview=true"+"&devicetype=Android";

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setWebChromeClient(new WebChromeClient());
    webView.getSettings().setDomStorageEnabled(true);
    webView.postUrl(url, EncodingUtils.getBytes(postData, "base64"));
}

这就是我想要做的:

private void goToSite() throws IOException {

    //Initialize the webview and set the contentView to display loadingscreen
    String url=VarControl.DEFAULT_LINK;
    setContentView(R.layout.loadingscreen);//Changed this
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new WebViewClient() {
        //show the webview when the page is fully loaded
        public void onPageFinished(WebView view, String url) {
           setContentView(R.layout.webview);// And changed this
        }
    });

    //Collect the login data and post it to the server
    String postData = "token="+loadToken()+"&deviceid="+VarControl.regid+"&webview=true"+"&devicetype=Android";

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setWebChromeClient(new WebChromeClient());
    webView.getSettings().setDomStorageEnabled(true);
    webView.postUrl(url, EncodingUtils.getBytes(postData, "base64"));
}

不幸的是,这导致了nullPointerException,我不知道为什么。 这是我的堆栈跟踪:

12-05 09:40:49.680    1514-1514/com.alserdamedia.wiib E/AndroidRuntime﹕ FATAL EXCEPTION:     main
Process: com.alserdamedia.wiib, PID: 1514
java.lang.RuntimeException: Could not dispatch event: class     com.alserdamedia.wiib.AsyncTaskResultEvent to handler [EventHandler public void             com.alserdamedia.wiib.MainActivity.onAsyncTaskResult(com.alserdamedia.wiib.AsyncTaskResultEvent) 
throws java.io.IOException]: null
        at com.squareup.otto.Bus.throwRuntimeException(Bus.java:456)
        at com.squareup.otto.Bus.dispatch(Bus.java:386)
        at com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:367)



        at com.squareup.otto.Bus.post(Bus.java:336)
        at com.alserdamedia.wiib.MyAsyncTask.onPostExecute(MyAsyncTask.java:103)
        at com.alserdamedia.wiib.MyAsyncTask.onPostExecute(MyAsyncTask.java:22)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.alserdamedia.wiib.MainActivity.goToSite(MainActivity.java:96)
at com.alserdamedia.wiib.MainActivity.onAsyncTaskResult(MainActivity.java:71)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.squareup.otto.EventHandler.handleEvent(EventHandler.java:89)
at com.squareup.otto.Bus.dispatch(Bus.java:384)
at com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:367)
at com.squareup.otto.Bus.post(Bus.java:336)
at com.alserdamedia.wiib.MyAsyncTask.onPostExecute(MyAsyncTask.java:103)
at com.alserdamedia.wiib.MyAsyncTask.onPostExecute(MyAsyncTask.java:22)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

为什么会出现这个错误,我可以做些什么来解决我的问题?

编辑:下面的答案表明 webView 不在我的加载屏幕中,我不知道他的意思是什么,我正在初始化 webView 对吗?如果不是,我该怎么做才能将其添加到加载屏幕??

【问题讨论】:

  • 因为你在 R.layout.loadingscreen 中没有 webview ?
  • @Decoy 我不明白你想说什么..我目前在我的 layout.main_activity 中也没有 webview,但是 webview 有效....你的评论太短了让我理解
  • 只需阅读上面网址中的帖子。
  • 好的......它告诉我它可能但可能很慢,没有解释空指针

标签: java android webview


【解决方案1】:

看看这个:

setContentView(R.layout.loadingscreen);//Changed this
webView = (WebView) findViewById(R.id.webView);

发生错误是因为webView 不在您的loadscreen 中。

我认为最简单的方法是在不使用setContentView 的情况下手动显示(在onPreExecute 中)和关闭(在onPostExecute 中)ProgressDialog

【讨论】:

  • 我不能接受这个作为答案,因为我正试图摆脱进度对话框。我想显示一个适合我的应用程序的屏幕
  • @BartHofma 抱歉,您的问题到底是什么?我认为您想在 webview 准备好时显示进度并摆脱它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2011-04-07
  • 1970-01-01
  • 2011-03-10
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多