Java 当webview启用时如何显示';装货完毕了吗?
我正在开发一个android登录应用程序。登录后,用户将被重定向到webview。目前一切都很好,但我想改变加载时显示的内容 目前我使用的是Java 当webview启用时如何显示';装货完毕了吗?,java,android,webview,Java,Android,Webview,我正在开发一个android登录应用程序。登录后,用户将被重定向到webview。目前一切都很好,但我想改变加载时显示的内容 目前我使用的是ProgressDialog。我想我可以更改setContentView()和onPageFinished()但是这会导致nullPointerException 以下是当前的工作方法: private void goToSite() throws IOException { //Create and start the 'loading' ani
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
,我不知道为什么。
这是我的stackTrace:
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对吗??如果没有,我该怎么做才能将其添加到loadingscreen???查看以下内容:
setContentView(R.layout.loadingscreen);//Changed this
webView = (WebView) findViewById(R.id.webView);
出现此错误的原因是webView
不在您的loadscreen
中
我认为最简单的方法是手动显示(在
onPreExecute
中)和关闭(在onPostExecute
中)ProgressDialog
而不使用setContentView
,因为你在R.layout.loadingscreen中没有webview?@Decoy我不明白你想说什么。。我目前在layout.main_活动中也没有webview,但是webview可以工作。。。。你的评论太短了,我听不懂。只要看看上面url里的帖子就行了。好的。。。它告诉我这是可能的,但可能很慢,没有解释nullpointer。我不能接受这个答案,因为我正在试图摆脱进度对话框。我想显示一个适合我的屏幕application@BartHofma对不起,你的问题是什么?我想你想在webview准备好后显示进度并摆脱它?