2015-01-27 16 views
10

Ich habe Probleme mit einem seltsamen Problem. Ich versuche eine https-Webseite zu laden, aber das erste Mal wird die Webansicht nicht geladen. Nach 60 Sekunden Wartezeit muss ich erneut auf meine Schaltfläche klicken, um meine Seite zu laden. Mein Gerät ist ein Nexus 4 mit Lollipop, aber dieses Problem tritt auch bei Geräten mit Android 4.4 und 4.1 auf. Die URL enthält nur wenige JavaScript-Dateien und CSS-Dateien.Webview nicht zum ersten Mal geladen

Log:

I/WebViewFactory﹕ Loading com.google.android.webview version 37 (1602158-arm) (code 111201) 
I/LibraryLoader﹕ Loading: webviewchromium 
I/LibraryLoader﹕ Time to load native libraries: 3 ms (timestamps 5331-5334) 
I/LibraryLoader﹕ Expected native library version number "",actual native library version number "" 
I/LibraryLoader﹕ Expected native library version number "",actual native library version number "" 
I/chromium﹕ [INFO:library_loader_hooks.cc(106)] Chromium logging enabled: level = 0, default verbosity = 0 
I/BrowserStartupController﹕ Initializing chromium process, renderers=0 
W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring 
W/chromium﹕ [WARNING:resource_bundle.cc(315)] locale_file_path.empty() 
I/chromium﹕ [INFO:aw_browser_main_parts.cc(63)] Load from apk succesful, fd=72 off=159196 len=3264 
I/chromium﹕ [INFO:aw_browser_main_parts.cc(78)] Loading webviewchromium.pak from, fd:73 off:229484 len:643667 
W/AudioManagerAndroid﹕ Requires BLUETOOTH permission 
W/chromium﹕ [WARNING:proxy_service.cc(901)] PAC support disabled because there is no system implementation 
W/chromium﹕ [WARNING:data_reduction_proxy_settings.cc(403)] SPDY proxy OFF at startup 
W/art﹕ Attempt to remove local handle scope entry from IRT, ignoring 
W/AwContents﹕ onDetachedFromWindow called when already detached. Ignoring 
I/chromium﹕ [INFO:SkUtilsArm.cpp(179)] Device supports ARM NEON instructions! 

Mein Code:

final WebView wv = (WebView) alert.findViewById(R.id.modal_wv); 

    wv.getSettings().setAppCacheEnabled(true); 
    wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
    wv.getSettings().setAppCachePath("/data/data/" + getPackageName() + "/cache"); 
    wv.getSettings().setAllowFileAccess(true); 
    wv.getSettings().setJavaScriptEnabled(true); 
    wv.loadUrl(connectionResponse.getUrl()); 
/* 
//Same behavior ... 
    wv.post(new Runnable() { 
     @Override 
     public void run() { 
      wv.loadUrl(connectionResponse.getUrl()); 
     } 
    }); 
*/ 

stelle ich einen neuen WebClient() überschreibt die folgenden Methoden: shouldOverrideUrlLoading, onLoadResource, onPageFinished.For Tests Zweck ich diesen Brauch WebClient entfernt aber es war immer noch nicht beim ersten Mal geladen.

Dank

+1

Sie haben keine Lösung für dieses Problem, da ich auch das gleiche Problem habe. –

+0

gleich hier, funktioniert nicht zum ersten Mal ... –

+0

haben Sie dieses Problem gelöst.? Ich bin auch mit der gleichen Sache konfrontiert. – Riser

Antwort

-2

haben erklärt, Sie Internet-Erlaubnis in AndroidManifest.xml?

<manifest...> 
.. . 
<uses-permission android:name="android.permission.INTERNET" /> 
.. 
</manifest> 

versuchen Sie auch einen Webclient Client.

  //default browser 
      wv.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
      { 
       L.log(url); 
       return super.shouldOverrideUrlLoading(view, url); 
      } 
     }); 
     //chrome browser 
     wv.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) 
      { 
       progressBar.setProgress(progress); 
       if (progress == 100) { 
        progressBar.setVisibility(View.GONE); 
       } 
      } 

     }); 
+0

Ja, ich habe diese Berechtigung bereits hinzugefügt. Ich füge den Chrome-Client und immer das erste Mal den Fortschritt bei 10 Prozent stoppen – Esdras

+0

Wenn er nicht die Berechtigung hatte, würde es nie laden ... nicht einmal nach 60 Sekunden ... –

0

Da Sie eine https url in webview laden, wird es SSL-Zertifizierung zu Problemen so müssen Sie eine weitere Methode außer Kraft setzen Zertifizierung Problem für den Umgang mit und behandeln es trotzdem hier ist der Code, wie Sie lösen sie

myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 
      Toast.makeText(MainActivity.this, description, 
        Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onReceivedSslError(WebView view, 
       SslErrorHandler handler, SslError error) { 
      // TODO Auto-generated method stub 
      // this method will proceed your url however if certification issues are there or not 
      handler.proceed(); 
     } 

    }); 
myWebView.loadUrl(url); 

EDIT: wenn Sie JavaScript-Schnittstelle für Ihre Webansicht aktivieren tun Sie das folgende Verfahren

private JavascriptInterface jsInterface; 


engine.getSettings().setJavaScriptEnabled(true); 
     jsInterface = new JavascriptInterface(); 
     try { 
      ComponentName comp = new ComponentName(this, Dashboard.class); 
      PackageInfo pinfo = getPackageManager().getPackageInfo(comp.getPackageName(), 0); 
      jsInterface.versionCode = pinfo.versionCode; 
      } catch (android.content.pm.PackageManager.NameNotFoundException e) { 
      } 
      engine.addJavascriptInterface(jsInterface, "androidlearnscripture"); 
          engine.requestFocus(View.FOCUS_DOWN); 
     } 

Und der Javascript-Code wird hier gehen

public void onPageStarted(WebView view, String url,Bitmap favicon) { 
      jsInterface.enablePreferencesMenu = false; 
      jsInterface.modalIsVisible = false; 
      jsInterface.urlForSharing = null; 
      bLoadingFinished = false; 
} 
+0

Not filled = /. Ich stelle fest, dass URL lädt css und js von anderen Server (jquery von code.jquery.com) und eine Schriftart von fonts.google.com. Beide Dateien werden mithilfe des https-Protokolls angefordert. Ich werde versuchen, diese zwei Dateien in meinem Server hinzufügen und erneut testen. Hast du eine andere Idee? – Esdras

+0

@Esdras Überprüfen Sie meine Änderungen –

2

traf ich das gleiche Problem. Ich verbrachte mehr als 3 Tage und fand die Ursache dafür, dass ein anderes WebView-Objekt pauseTimers() aufruft, um etwas CPU-Leistung zu sparen, die eigentlich "alle Layout-, Parsing- und JavaScript-Timer für alle WebViews unterbricht".

+0

Thx Kumpel für die Rettung meines Lebens :), nach einem ganzen Tag Debugging: | – droida

0

Ich löste das gleiche Problem durch Hinzufügen von Webview zum Layout von Funktion onPageFinished(WebView view, String url), nachdem es fertig geladen wurde.

Verwandte Themen