2016-04-15 7 views
0

Ich erhalte diesen Fehler auch nach dem Überprüfen von if (dialog! = Null und dialog.isShowing()). Hat jemand eine Idee, was Grund dafür sein könnte?Fehler beim Dialog DISMISS erhalten, auch nachdem der Dialog nicht gleich Null ist

Unten ist mein Stack-Trace und Klassencode. Vielen Dank im Voraus

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) 

Das ist die Klasse:

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

Diese Ausnahme tritt auf, wenn das Dialogfeld Aktivität, das gestartet wurde, nicht auf dem Bildschirm angezeigt wird. Ich meine, irgendwie zeigen Sie eine andere Aktivität oder beenden die aktuelle Aktivität, bevor Sie den Dialog schließen. Ich kann Code in 'shouldOverrideUrlLoading' sehen, um eine andere Aktivität anzuzeigen. Schließen Sie den Dialog, bevor Sie eine andere Aktivität anzeigen. –

Antwort

1

Was @Pankaj sagte richtig ist. Sie müssen Ihren Fortschrittsdialog schließen, bevor Sie eine andere Aktivität ausführen.