在我的活动中,我有一个Webview。我需要在webview加载页面时显示加载(进度条),并在加载页面时关闭进度条。我写了以下代码:
wvBrowser.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar = ProgressDialog.show(F1TrackCountryRaceTrackInfo.this, "", "Loading...");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressBar.dismiss();
}
});
当我第一次运行应用程序时,一切都很好,但第二次应用程序崩溃,logcat指向“onPageFinished”中的“progressBar.dismiss();
”。
我添加了“onPause()”方法以关闭活动并认为它可能解决了问题,但我仍然遇到同样的问题。
@Override
protected void onPause() {
super.onPause();
if(progressBar.isShowing())
progressBar.dismiss();
Toast.makeText(this, "Activity closed.", Toast.LENGTH_LONG).show();
F1TrackCountryRaceTrackInfo.this.finish();
}
我的错误是什么以及如何解决?感谢
Logcat错误:
04-03 11:14:36.880:E / AndroidRuntime(19613):致命异常:主要 04-03 11:14:36.880:E / AndroidRuntime(19613): java.lang.NullPointerException 04-03 11:14:36.880: E / AndroidRuntime(19613):at com.maxis.f12011.activities.F1TrackCountryRaceTrackInfo $ 1.onPageFinished(F1TrackCountryRaceTrackInfo.java:75) 04-03 11:14:36.880:E / AndroidRuntime(19613):at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:289) 04-03 11:14:36.880:E / AndroidRuntime(19613):at android.os.Handler.dispatchMessage(Handler.java:99)04-03 11:14:36.880:E / AndroidRuntime(19613):at android.os.Looper.loop(Looper.java:130)04-03 11:14:36.880: E / AndroidRuntime(19613):at android.app.ActivityThread.main(ActivityThread.java:3691)04-03 11:14:36.880:E / AndroidRuntime(19613):at java.lang.reflect.Method.invokeNative(Native Method)04-03 11:14:36.880:E / AndroidRuntime(19613):at java.lang.reflect.Method.invoke(Method.java:507)04-03 11:14:36.880: E / AndroidRuntime(19613):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:907) 04-03 11:14:36.880:E / AndroidRuntime(19613):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)04-03 11:14:36.880:E / AndroidRuntime(19613):at dalvik.system.NativeStart.main(原生方法)
答案 0 :(得分:0)
我从onPageStarted()导出“progressBar = ProgressDialog.show(F1TrackCountryRaceTrackInfo.this, "", "Loading...");
”并将其放在oncreate()方法中,问题解决了。
现在每次活动开始加载都会显示直到webview加载页面然后onPageFinished()关闭加载栏。
答案 1 :(得分:0)
这里的主要问题是每个主框架加载调用onPageStarted(WebView view, String url, Bitmap favicon)
方法一次,因此带有iframe或框架集的页面将为主框架调用onPageStarted一次。这也意味着当嵌入帧的内容发生变化时,即单击目标为iframe的链接时,不会调用onPageStarted。 see here
所以progressbar只是第一次实例化,下次没有实例化。问题是在null上调用dismiss()。
答案 2 :(得分:0)
试试这个工作正常..
private WebView webview;
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.abc);
webview = (WebView) findViewById(R.id.webview);
dialog = new ProgressDialog(classname.this);
dialog.setMessage("Loading......");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebviewUrl());
webview.loadUrl(your url here...);
}
public class WebviewUrl extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url)
{
// TODO Auto-generated method stub
super.onPageFinished(view, url);
if (dialog.isShowing())
{
dialog.dismiss();
}
}
}
答案 3 :(得分:0)
老问题,但这就是我的工作方式。
创建并设置进度条和WebView:
private WebView myWebView;
private ProgressBar myProgressBar;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_web);
myWebView = (WebView) findViewById(R.id.ib_web_wv_main);
myProgresBar = (ProgressBar) findViewById(R.id.ib_web_progressbar);
}
在需要时使进度条可见且不可见:
myWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
myProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
myProgressBar.setVisibility(View.INVISIBLE);
}
});
答案 4 :(得分:-1)
在progressBar.dismiss();
方法{。}}之前尝试放置super.onPageFinished(view, url);
。