2014-01-17 7 views
6

Hallo Ich möchte diese URL http://3864.cloud-matic.net/ von meinem Android-Webview zu öffnen, und ich habe viele Möglichkeiten ausprobiert, aber die App öffnet nicht mainActivity. Was ich versucht habe, ist unten.BasicAuthentication in Android für Webview funktioniert nicht

public void onCreate(Bundle state) { 
    super.onCreate(state); 
    setContentView(R.layout.main); 
    WebView webView = (WebView) findViewById(R.id.webView1); 
    webView.setHttpAuthUsernamePassword("cloud-matic.net/",  "realm", username, password); 
    webView.loadUrl("http://3864.cloud-matic.net/"); 
} 

Bitte geben Sie mir eine Idee, wo ich falsch liege. Ali

+0

"app sogar nicht öffnet mainActivity" erhalten Sie eine Art von Fehler oder Absturz oder nur einen leeren Bildschirm? – hypd09

+0

Können Sie einen Logcat bereitstellen? – PsyGik

+0

Zuerst muss ich fragen, was ist "Realm", seine Verwendung in SetHttpAuthUsernamePassword-Funktion. Wenn ich einige Wert fehlt dort vor der Freigabe von Logcat? – Ali

Antwort

20
webview.setWebViewClient(new MyWebViewClient()); 

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public void onReceivedHttpAuthRequest(WebView view, 
      HttpAuthHandler handler, String host, String realm) { 
     handler.proceed("[email protected]", "mypassword"); 
    } 
} 

Diese Lösung meisten dort gestimmt ist Ich bin nicht sicher, wo die URL zu open.Please einzustellen vorschlagen.

+0

Haben Sie versucht, 'webView.loadUrl (" http: //3864.cloud-matic .net/");' nach dem Einstellen des Webclient-Clients? –

+0

Hallo, Ja, ich benutze dies in meiner OnCreate-Methode. webView.loadUrl ("http://3864.cloud-matic.net/"); webView.setWebViewClient (neu MyWebViewClient()); – Ali

+0

Sie müssen URL mit 'http: //' angeben, wenn Sie 'loadUrl' aufrufen, dh' webView.loadUrl ("http://3864.cloud-matic.net"); ' –

0

Dies sollte perfektes Code-Snippet sein.

webView.getSettings().setJavaScriptEnabled(true); 
    webView.setFocusable(true); 
    webView.loadUrl("http://3864.cloud-matic.net/"); 
    webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onReceivedHttpAuthRequest(WebView view, 
               HttpAuthHandler handler, String host, String realm) { 
      handler.proceed("[email protected]", "mypassword"); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      prDialog.setMessage("Please wait ..."); 
      prDialog.show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      if (prDialog != null) { 
       prDialog.dismiss(); 
      } 
     } 
    }); 
0

Basierend auf der Antwort in einem anderen Thema habe ich es auf eine etwas andere Art und Weise gemacht.

Diese Lösung funktioniert auch für den Fall, dass Sie Auto-Login-Formular angezeigt, wenn Authentifizierung fehlgeschlagen (in diesem Fall funktioniert Lösung mit Override 'onReceivedHttpAuthRequest' nicht, da Sie eine normale HTML-Seite ohne Fehler erhalten).

String up = "yourusername"+":"+"yoursuperstrongpassword"; 
String authEncoded = new String(Base64.encodeBase64(up.getBytes())); 
String authHeader = "Basic "+authEncoded; 
Map<String, String> headers = new HashMap<>(); 
headers.put("Authorization", authHeader); 
myWebView.loadUrl("https://192.168.137.1:8443/tmedserver/doctor/doctorConsultations/consultationCall.mvc?consultationId=23", headers);