2012-04-03 8 views
0

私の活動では、私はWebviewを持っています。 webviewがページをロードしているときにLoading(進行状況バー)を表示し、ページのロードが完了したらプログレスバーを閉じる必要があります。私が最初にアプリを実行すると、すべてが「onPageFinished」の「progressBar.dismiss();」に二度目のアプリケーションがクラッシュし、logcatポイントのためしかし、大丈夫ですAndroid、setWebViewClient()のonPageFinished()メソッドの進行状況バーを閉じる方法は?

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(); 
      } 
     }); 

:私は、コードを次のよう書かれています。

アクティビティを閉じるために "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): FATAL EXCEPTION: main 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(Native Method)

答えて

-1

onPageFinished方法でsuper.onPageFinished(view, url);前に行わprogressBar.dismiss();を試してみてください。

+0

あなたのコメントをありがとう残念ながら、それは動作しませんでしたし、同じクラッシュ起こりました。 – Hesam

0

onPageStarted()から "progressBar = ProgressDialog.show(F1TrackCountryRaceTrackInfo.this, "", "Loading...");"をエクスポートし、oncreate()メソッドに入れて問題を解決しました。 アクティビティの読み込みが開始されるたびに、webviewがページをロードしてからonPageFinished()がローディングバーを閉じられるまで表示されます。

0

メインフレームの負荷ごとにonPageStarted(WebView view, String url, Bitmap favicon)メソッドが1回呼び出されるため、iframeまたはフレームセットを持つページはメインフレームに対してonPageStartedを1回呼び出します。これは、埋め込みフレームのコンテンツが変更されたとき、つまりターゲットがiframeであるリンクをクリックしたときにonPageStartedが呼び出されないことを意味します。 see here

したがって、プログレスバーは初めてインスタンス化され、次にインスタンス化されません。問題は、nullでdismiss()を呼び出すことです。

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(); 
       } 
     } 
    } 
+0

あなたの答えをありがとうが、それは動作しなかった、同じクラッシュが起こった。 – ACBM

0

旧質問このIT作業罰金を試みるが、これは、私はそれがうまく作った方法です。

プログレスバーとの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); 
     } 

    }); 
関連する問題