15

Ich verwende WebView zum Laden einer Website. Aber es ist sehr langsam und leckt, wenn bestimmte Websites geladen werden. Ich lade WebView mit dem folgenden Code.WebView lädt die Webseite nicht

@Override 
    protected void onNewIntent(Intent intent) { 
     if (intent.getStringExtra("url") != null) { 
      webView.loadurl(intent.getStringExtra("url")); 

      } 
    } 

Aber ich rufe webView.loadUrl(Config.URL); (Config.URL gleiche URL enthalten kann, wie oben angegeben) nach WebView in onCreate() Verfahren mit dem folgenden initialisiert.

 this.webView = (WebView) findViewById(R.id.wv); 
     this.webView.getSettings().setJavaScriptEnabled(true); 
     this.webView.getSettings().setLoadsImagesAutomatically(true); 
     this.webView.getSettings().setDomStorageEnabled(true); 
     this.webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     MyClient client = new MyClient(WebActivity.this, (ProgressBar)findViewById(R.id.progressBar)); 
     webView.setWebViewClient(client); 

Laden ein von onCreate() funktioniert gut (nicht in Ordnung, es ist zu langsam). Aber die gleiche URL, die von onNewIntent() geladen wird, ist funktioniert nicht !!!. Nachdem ich dies in onNewIntent() getan habe, wurden keine URLs geladen mit webView.loadurl() und die aktuelle Seite wird unbeweglich. dh. Die Scrollbars bewegen sich in WebView, aber die Seite scrollt nicht. Ich testete die gleiche URL in onCreate() und es funktioniert.

zu tun, dass ich url bin vorbei mit

intent.putExtra("url", Config.URL+targetUrl); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

mit der anstehenden Absicht aus den Meldungen. Obwohl es in einigen Geräten funktioniert, d. H. Google Nexus. Aber es funktioniert nicht bei den meisten Telefonen. Ich habe

android:hardwareAccelerated="true" 

myclient

public class MyClient extends WebViewClient{ 
    private Context context; 
    private Activity activity; 
    private Handler handler; 
    private Runnable runnable; 
    private ProgressBar viewBar; 
    private String ret,ret2; 
    public void setFirstLoad(boolean firstLoad) { 
     this.firstLoad = firstLoad; 
    } 

    private boolean firstLoad=false; 
    public MyClient(Activity activity, ProgressBar bar) { 
     this.context = activity.getApplicationContext(); 
     this.activity = activity; 
     viewBar=bar; 
     handler=new Handler(); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     /*if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, 
        Uri.parse(url)); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(intent); 
     }else if(url.startsWith("http:") || url.startsWith("https:")) { 
      *//*view.setVisibility(View.GONE); 
      viewBar.setVisibility(View.VISIBLE);*//* 
      view.loadUrl(url); 
     } 
     return true;*/ 
     if (Uri.parse(url).getHost().equals("www.somepage.com")) { 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     try { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(intent); 
      Answers.getInstance().logShare(new ShareEvent() 
      .putContentId(Build.USER) 
      .putMethod(shareName(url)) 
      .putContentName(contentDecode(url)) 
      .putContentType("news_share")); 
     }catch (android.content.ActivityNotFoundException e){ 
      Log.e("Activity not found",e.toString()); 
      Toast.makeText(context,"Application not found",Toast.LENGTH_LONG).show(); 
     } 

     return true; 

    } 

    @Override 
    public void onReceivedError(final WebView view, int errorCode, String description, final String failingUrl) { 
     //Clearing the WebView 
     try { 
      view.stopLoading(); 
     } catch (Exception e) { 
     } 
     try { 
      view.clearView(); 
     } catch (Exception e) { 
     } 
     if (view.canGoBack()) { 
      view.goBack(); 
     } 
     view.loadUrl("about:blank"); 

     //Showing and creating an alet dialog 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity); 
     alertDialog.setTitle("Error"); 
     alertDialog.setMessage("No internet connection was found!"); 
     alertDialog.setPositiveButton("Retry", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       view.loadUrl(failingUrl); 

      } 
     }); 
     AlertDialog alert = alertDialog.create(); 
     alert.show(); 

     //Don't forget to call supper! 
     super.onReceivedError(view, errorCode, description, failingUrl); 
    } 

    @Override 
    public void onLoadResource(final WebView view, String url) { 
     super.onLoadResource(view, url); 
     //injectScriptFile(view, "js/script.js"); 
     injectCSS(view,"css/style.css"); 
     if (firstLoad){ 
      firstLoad=false; 
      view.setVisibility(View.INVISIBLE); 
      viewBar.setVisibility(View.VISIBLE); 
      runnable=new Runnable() { 
       @Override 
       public void run() { 
        viewBar.setVisibility(View.GONE); 
        view.setVisibility(View.VISIBLE); 
       } 
      }; 
      handler.postDelayed(runnable,2000); 
     } 

     // test if the script was loaded 
     // view.loadUrl("javascript:setTimeout(hideMe(), 200)"); 
    } 

    /*@Override 
    public void onPageFinished(final WebView view, String url) { 

     //System.gc(); 
    }*/ 


    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     System.gc(); 
    } 

Die Frage ist: Was das Problem ist, wenn loadurl() Methode in onNewIntent() mit?

+0

Entschuldigung, mein Herr, finden Sie die gewünschten Ergebnisse in ** intent.getStringExtra ("url") **? Gibt es bei LogCat seltsame Nachrichten? Vielen Dank. – statosdotcom

+0

@statosdotcom ja ich fand es in der Absicht. In Logcat wird angezeigt, dass die Webseite geladen wird, aber nicht display.ie. Seite ändert sich nicht von vorheriger –

+0

Bitte fügen Sie Ihre OnPause-Methode ein, wenn Sie sie so verwenden, wie sie vor OnNewIntent aufgerufen wurde. Hast du auch einen Breakpoint bei OnNewIntent, d. H. Bist du sicher, dass er getroffen wird? –

Antwort

6

Versuchen Sie, diese von dem Sie Lasten webview

web.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return super.shouldOverrideUrlLoading(view, url); 
     } 
    }); 
+0

Ja, Sie sind von Calicut richtig? –

+0

Dies ist keine Antwort, es wird nicht nach der Rückkehr Anweisung ausführen. Eigentlich verwende ich es. Siehe meinen Code –

1

Sie den Webclient die Webansicht zu handhaben können. Hier schließe ich das Javascript mit dem Laden ein.

  String aboutURL="YOUR URL"; 

     final ProgressDialog pd = ProgressDialog.show(, "", "Please wait", true); 

     WebSettings settings=Webview.getSettings(); 

     settings.setJavaScriptEnabled(true); 
     settings.setAppCacheEnabled(true); 
     settings.setDomStorageEnabled(true); 
     settings.setLoadsImagesAutomatically(true); 
     settings.setDatabaseEnabled(true); 
     settings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
     settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
     settings.setSupportZoom(true); 
     settings.setBuiltInZoomControls(true); 

     Webview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) 
      { 
       pd.show(); 
      } 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       pd.dismiss(); 
      } 
     }); 
     Webview.loadUrl(aboutURL); 

Hier Laden basiert auf Netzwerk

0

Verwenden Handler verarbeitet, wie unter einer Verzögerung Aktion schreiben wird dies beheben, aber ich weiß nicht, warum.

new Handler().post(webView.loadurl(url)); 
Verwandte Themen