Ich möchte die URL in WebView
laden
Ich habe den folgenden Code verwendet:
webView = (WebView) findViewById(R.id.webview1);
webView.setWebViewClient(new HostsWebClient());
webView.getSettings().setPluginState(PluginState.ON);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setSupportMultipleWindows(false);
webView.getSettings().setSupportZoom(false);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.loadUrl(URL);
Aber wenn ich es ausführe, kann ich die URL nicht laden. Ich bekomme eine Webseite nicht verfügbar.
Könnte jemand helfen?
Haben Sie die Internet-Berechtigung in Ihre Manifestdatei aufgenommen? Wenn nicht, fügen Sie die folgende Zeile hinzu.
<uses-permission Android:name="Android.permission.INTERNET"/>
hoffe das wird dir helfen.
EDIT
Verwenden Sie die folgenden Zeilen.
public class WebViewDemo extends Activity {
private WebView webView;
Activity activity ;
private ProgressDialog progDailog;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
activity = this;
progDailog = ProgressDialog.show(activity, "Loading","Please wait...", true);
progDailog.setCancelable(false);
webView = (WebView) findViewById(R.id.webview_compontent);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progDailog.show();
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, final String url) {
progDailog.dismiss();
}
});
webView.loadUrl("http://www.teluguoneradio.com/rssHostDescr.php?hostId=147");
}
Berechtigung hinzufügen Internetberechtigung im Manifest.
als <uses-permission Android:name="Android.permission.INTERNET"/>
Dieser Code funktioniert
public class WebActivity extends Activity {
WebView wv;
String url="http://www.teluguoneradio.com/rssHostDescr.php?hostId=147";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
wv=(WebView)findViewById(R.id.webUrl_WEB);
WebSettings webSettings = wv.getSettings();
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.getSettings().setBuiltInZoomControls(true);
wv.getSettings().setPluginState(PluginState.ON);
wv.setWebViewClient(new myWebClient());
wv.loadUrl(url);
}
public class myWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
}
vielleicht SSL
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// ignore ssl error
if (handler != null){
handler.proceed();
} else {
super.onReceivedSslError(view, null, error);
}
}
Verwenden Sie die folgenden Dinge in Ihrem Webview
webview.setWebChromeClient(new WebChromeClient());
implementieren Sie anschließend die erforderlichen Methoden für die WebChromeClient-Klasse.
Prüfen Sie zunächst, ob Sie in der Manifest-Datei über eine Internet-Berechtigung verfügen.
<uses-permission Android:name="Android.permission.INTERNET" />
Sie können dann folgenden Code in der onCreate () - oder Initialize () -Methode hinzufügen:
final WebView webview = (WebView) rootView.findViewById(R.id.webview);
webview.setWebViewClient(new MyWebViewClient());
webview.getSettings().setBuiltInZoomControls(false);
webview.getSettings().setSupportZoom(false);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setDomStorageEnabled(true);
webview.loadUrl(URL);
Und schreibe eine Klasse, um Callbacks von Webview abzuwickeln -
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//your handling...
return super.shouldOverrideUrlLoading(view, url);
}
}
in derselben Klasse können Sie auch andere wichtige Rückrufe verwenden, z.
- onPageStarted()
- onPageFinished()
- onReceivedSslError()
Sie können auch "SwipeRefreshLayout" hinzufügen, um die Swipe-Aktualisierung zu aktivieren und die Webansicht zu aktualisieren.
<Android.support.v4.widget.SwipeRefreshLayout
Android:id="@+id/swipeRefreshLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<WebView
Android:id="@+id/webview"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</Android.support.v4.widget.SwipeRefreshLayout>
Und aktualisieren Sie die Webansicht, wenn der Benutzer den Bildschirm durchblättert:
SwipeRefreshLayout mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(false);
webview.reload();
}
}, 3000);
}
});
Hinweis: Stellen Sie sicher, dass die Internet-Erlaubnis erteilt wurde.
In Android 9.0
Webview oder Imageloader können URL oder Image nicht laden, da Android 9 ein Netzwerksicherheitsproblem hat, das nach Manifestdatei für alle Subdomänen aktiviert werden muss. Sie können also entweder eine Sicherheitskonfigurationsdatei hinzufügen.
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">www.google.com</domain>
</domain-config>
</network-security-config>
<application
Android:networkSecurityConfig="@xml/network_security_config"
...>
</application>
wenn Sie alle Subdomains zulassen möchten
<application
Android:usesCleartextTraffic="true"
...>
</application>
Die einfachste Lösung ist, zu Ihrem XML-Layout zu wechseln, das Ihre Webansicht enthält. Ändern Sie Ihr Android: layout_width und Android: layout_height von "wrap_content" in "match_parent".
<WebView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/webView"/>
In meinem Fall wurde das Problem durch Hinzufügen der folgenden Funktionen zu WebViewClient behoben. Die Funktionen lauten: onReceivedSslError
und Depricated und neue API-Versionen von shouldOverrideUrlLoading
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
Log.i(TAG, "loading: deprecation");
return true;
//return super.shouldOverrideUrlLoading(view, url);
}
@Override
@TargetApi(Build.VERSION_CODES.N)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
Log.i(TAG, "loading: build.VERSION_CODES.N");
return true;
//return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onPageStarted(
WebView view, String url, Bitmap favicon) {
Log.i(TAG, "page started:"+url);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, final String url) {
Log.i(TAG, "page finished:"+url);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError er) {
handler.proceed();
}
});
Nur als alternative Lösung:
Für mich hat webView.getSettings().setUserAgentString("Android WebView")
den Trick gemacht.
Ich hatte bereits eine INTERNET-Berechtigung und WebViewClient
sowie WebChromeClient
implementiert.