2016-04-15 2 views
0

if(dialog!= nullおよびdialog.isShowing())をチェックしてもこのエラーが発生します。誰もがそれが起こっている理由が何であるか考えていますか?DialogがNullと等しくないかどうかをチェックしてもダイアログDISMISSにエラーが発生する

以下は私のスタックトレースとクラスコードです。事前のおかげで

STACK_TRACE=java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{2c7550a8 V.E..... R.....ID 0,0-326,175} not attached to window manager 
    at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:396) 
    at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:322) 
    at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116) 
    at android.app.Dialog.dismissDialog(Dialog.java:341) 
    at android.app.Dialog.dismiss(Dialog.java:324) 
    at com.abcd.org.Eula$9.onPageFinished(Eula.java:332) 
    at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:513) 
    at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:188) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5343) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

これはクラスです:

public class Eula { 


    private static Boolean dialog_show ; 

    static interface OnEulaAgreedTo { 
     void onEulaAgreedTo(); 
    } 

    public static boolean show(final Activity activity,final Context context,final Boolean flag) { 
     final SharedPreferences preferences = activity.getSharedPreferences(PREFERENCES_EULA, Activity.MODE_PRIVATE); 
     Log.d(TAG, "insideEula"); 
     dialog_show = false; 

     final ProgressDialog progress = new ProgressDialog(activity); 
     progress.setMessage("Loading EULA......"); 
     progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progress.setIndeterminate(true); 
     progress.setCanceledOnTouchOutside(false); 
     progress.setCancelable(false); 



     if (!preferences.getBoolean(PREFERENCE_EULA_ACCEPTED, false)) { 
      final AlertDialog.Builder builder = new AlertDialog.Builder(
        activity); 
      Log.d(TAG, "insideEulaLaunch"); 
      builder.setTitle(R.string.eula_title); 
      builder.setCancelable(true); 
      builder.setPositiveButton(R.string.eula_accept, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          preferences.edit().putBoolean(PREFERENCE_EULA_ACCEPTED, true).commit(); 
          if (activity instanceof OnEulaAgreedTo) { 
           ((OnEulaAgreedTo) activity).onEulaAgreedTo(); 

          } 

         } 
        }); 
      builder.setNegativeButton(R.string.eula_refuse, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          refuse(activity); 

         } 
        }); 
      builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
       public void onCancel(DialogInterface dialog) { 
        refuse(activity); 
       } 
      }); 
      WebView wv = new WebView(activity); 
       wv.getSettings().setJavaScriptEnabled(true); 

       wv.getSettings().setBuiltInZoomControls(true); 

       wv.getSettings().setSupportZoom(true); 

       wv.getSettings().setUseWideViewPort(true); 


      /*  wv.getSettings().getAllowContentAccess(); 

       wv.getSettings().setJavaScriptEnabled(true); 

       wv.getSettings().supportMultipleWindows(); 

       wv.getSettings().setAllowContentAccess(true); 

       wv.getSettings().setAllowFileAccess(true); 

       wv.getSettings().setAllowFileAccessFromFileURLs(true); 

       wv.getSettings().setAllowUniversalAccessFromFileURLs(true);*/ 

       wv.setClickable(true); 

       wv.setInitialScale(1); 

      try{ 
       wv.loadUrl(context.getString(R.string.eula_url)); 
      }catch(Exception e){ 
       Log.d(TAG, "eula fil" + e.getMessage().toString());    
      }  


      wv.setOnKeyListener(new OnKeyListener() 
      { 
       @Override 
       public boolean onKey(View v, int keyCode, KeyEvent event) 
       { 
        if(event.getAction() == KeyEvent.ACTION_DOWN) 
        { 
         WebView webView = (WebView) v; 

         switch(keyCode) 
         { 
          case KeyEvent.KEYCODE_BACK: 
           if(webView.canGoBack()) 
           { 
            webView.goBack(); 
            return true; 
           } 
           break; 
         } 
        } 

        return false; 
       } 
      }); 
      wv.requestFocus(View.FOCUS_DOWN); 
      wv.setOnTouchListener(new View.OnTouchListener() 
      { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        // TODO Auto-generated method stub 
        switch (event.getAction()) 
        { 
         case MotionEvent.ACTION_DOWN: 
         case MotionEvent.ACTION_UP: 
          if (!v.hasFocus()) 
          { 
           v.requestFocus(); 
          } 
          break; 
        } 
        return false; 
       } 
      }); 
      wv.setWebViewClient(new WebViewClient() { 


       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        // view.loadUrl(url); 
        // return true; 
        Log.d(TAG, "shouldOverrideUrlLoading" + url); 

        Pattern pattern = Pattern.compile("[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"); 


        String cleanUrl = url; 
        if (url.contains("?")) { 
         // remove the query string 
         cleanUrl = url.substring(0, url.indexOf("?")); 
        } 

        Matcher mat = pattern.matcher(url); 

        Log.d(TAG, "url == " + url); 

        if (cleanUrl.endsWith("pdf")) { 
         Log.d(TAG, "pdf"); 
         Intent intent = new Intent(Intent.ACTION_VIEW); 
         intent.setDataAndType(Uri.parse(url), "application/pdf"); 
         try { 
          Uri uriUrl = Uri.parse(cleanUrl); 
          Intent intentUrl = new Intent(Intent.ACTION_VIEW, 
            uriUrl); 
          view.getContext().startActivity(intentUrl); 
          return true; 

         } catch (Exception e) { 
          Toast.makeText(context, "No PDF Viewer Installed", 
            Toast.LENGTH_LONG).show(); 
         } 
        } else if(url.contains("mailto:")){ 
         Log.d(TAG, "mailto"); 
         Uri uriUrl = Uri.parse(cleanUrl); 
         Intent intentUrl = new Intent(Intent.ACTION_VIEW, 
           uriUrl); 
         view.getContext().startActivity(intentUrl); 
         return true; 
        } else if(url.contains("tel:")){ 
         Log.d(TAG, "tel"); 
         String telUrl = url;       
         Intent intent = new Intent(Intent.ACTION_DIAL); 
         intent.setData(Uri.parse(telUrl)); 
         view.getContext().startActivity(intent); 
        } 
        else { 
         Log.d(TAG, "default"); 
//      view.loadUrl(url); 
         Uri uriUrl = Uri.parse(cleanUrl); 
         Intent intentUrl = new Intent(Intent.ACTION_VIEW, 
           uriUrl); 
         view.getContext().startActivity(intentUrl); 
        } 
        return true; 
       } 

       @Override 
       public void onPageFinished(WebView view, String url) { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onPageFinished"); 
        if (progress != null && progress.isShowing()) { 
         progress.dismiss(); 
         if(DataTransLayer.canTransferData(context)){ 
          builder.show(); 
         }else{       
//       builder.show().getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);        
          activity.finish(); 
         } 
        } 

       } 

       @Override 
       public void onPageStarted(WebView view, String url, 
         Bitmap favicon) { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onPageStarted"); 
        if(!dialog_show){ 
         progress.show(); 
         dialog_show = true; 
        }     

       }   

      }); 

      builder.setView(wv);    

      return false; 
     } 
     return true; 
    } 



    private static void refuse(Activity activity) { 
     activity.finish(); 
    } 

    private static CharSequence readEula(Activity activity) { 
     BufferedReader in = null; 
     try { 
      in = new BufferedReader(new InputStreamReader(activity.getAssets() 
        .open(ASSET_EULA))); 
      String line; 
      StringBuilder buffer = new StringBuilder(); 
      while ((line = in.readLine()) != null) 
       buffer.append(line).append('\n'); 

      byte[] latin1 = buffer.toString().getBytes("ISO-8859-1"); 
      return new String(latin1); 

      //return buffer; 
     } catch (IOException e) { 
      return ""; 
     } finally { 
      closeStream(in); 
     } 
    } 

    private static void closeStream(Closeable stream) { 
     if (stream != null) { 
      try { 
       stream.close(); 
      } catch (IOException e) { 
       // Ignore 
      } 
     } 
    } 

} 
+0

この例外は、開始されたアクティビティダイアログが画面に表示されない場合に発生します。どういうわけか、ダイアログを閉じる前に別のアクティビティを表示しているか、現在のアクティビティを終了しています。別のアクティビティを表示するために 'shouldOverrideUrlLoading'にいくつかのコードを見ることができます。そのため、別のアクティビティを表示する前にダイアログを閉じます。 –

答えて

1

@Pankajが正しいと言いました。別のアクティビティに進む前に、進行状況ダイアログを閉じる必要があります。