2017-01-16 18 views
-3

WebViewのウェブサイトでアプリを実行しようとしていますが、私のアプリを閉じるエラーNullPointerExceptionがあります。私はそれがnullの値を使用していることがわかりました。 ProgressDialogのNullPointerExceptionを回避するためにコードを変更するにはどうすればよいですか?ProgressDialogでNullPointerExceptionが発生しました

CODE

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 




private ProgressDialog progressDialog; 





private class MyWebviewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().endsWith("ugb.edu.sv")) { 
      //open url contents in webview 
      return false; 
     } else { 
      //here open external links in external browser or app 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      view.getContext().startActivity(intent); 
      return true; 
     } 

    } 

    // Progress Dialog 

    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     if (progressDialog == null) { 
      progressDialog = new ProgressDialog(MainActivity.this); 
      progressDialog.setTitle("Please wait..."); 
      progressDialog.setMessage("Loading..."); 
      progressDialog.setCancelable(false); 
      progressDialog.show(); 
     } 
    } 
    public void onPageFinished(WebView view, String url) { 
     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
      progressDialog = null; 
     } 
    } 


} 

Logcatエラーが

W/System.err: java.lang.NullPointerException 
W/System.err:  at sv.edu.ugb.ugbapp.MainActivity$MyWebviewClient.onPageFinished(MainActivity.java:241) 
W/System.err:  at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:455) 
W/System.err:  at com.android.org.chromium.android_webview.AwContentsClient$AwWebContentsObserver.didNavigateMainFrame(AwContentsClient.java:93) 
W/System.err:  at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 
W/System.err:  at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:24) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:136) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5426) 
W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
W/System.err:  at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
A/libc: Fatal signal 6 (SIGABRT) at 0x00006412 (code=-6), thread 25618 (.edu.ugb.ugbapp) 
+0

onPageFinishedに追加した場合(progressDialog = NULL && progressDialog.isShowing()!){ – Pavya

+0

場合(ヌル= progressDialog && progressDialog.isShowing()!){ progressDialog.dismiss()。 progressDialog = null; } –

答えて

0

あなたはそれを使用する前に、nullではないチェックすることにより、安全にprogressDialogへの参照を扱うことができます。

isShowing()ここではdismiss()でチェックされているので、ここでは必要ない場合があります。

また、エッジケースによっては、onPageStartedの前に進捗ダイアログが表示されている可能性もありますので、ここでも確認してください。

public void onPageStarted(WebView view, String url, Bitmap favicon) { 
    if (progressDialog != null) { 
     progressDialog.dismiss(); 
     progressDialog = null; 
    } 
    if (progressDialog == null) { 
     progressDialog = new ProgressDialog(MainActivity.this); 
     progressDialog.setTitle("Please wait..."); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
    } 
} 
public void onPageFinished(WebView view, String url) { 
    if (progressDialog != null) { 
     progressDialog.dismiss(); 
    } 
    progressDialog = null; 
} 
+0

それは魅力のように動作します。 –

0

からあなたonPageFinished機能を変更します。

public void onPageFinished(WebView view, String url) { 
    if (progressDialog.isShowing()) { 
     progressDialog.dismiss(); 
     progressDialog = null; 
    } 
} 

へ:

public void onPageFinished(WebView view, String url) { 
    if (progressDialog!= null && progressDialog.isShowing()) { 
     progressDialog.dismiss(); 
     progressDialog = null; 
    } 
} 

progressDialogの値は時々ヌルかもしれないとprogressDialog.isShowing()を呼び出すとNullPointerExceptionがスローされますときonPageFinishedので。

+0

あなたは答えを受け入れることができますか? – himanshu1496

0

使用trycatch方法:

// Called when all page resources loaded 
    public void onPageFinished(WebView view, String url) { 

     try { 
      // Close progressDialog 
      if (progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
       progressDialog = null; 
      } 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
    } 
関連する問題