WebView
に [〜#〜] url [〜#〜] をロードしたい
私は次のコードを使用しました:
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);
しかし、実行すると、URLをロードできません。 Webページを利用できません。
誰も助けてもらえますか?
マニフェストファイルにインターネットアクセス許可を追加しましたか?そうでない場合は、次の行を追加します。
<uses-permission Android:name="Android.permission.INTERNET"/>
これがあなたのお役に立てば幸いです。
[〜#〜] edit [〜#〜]
以下の行を使用してください。
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");
}
マニフェストにインターネットアクセス許可を追加します。
なので <uses-permission Android:name="Android.permission.INTERNET"/>
このコードは動作しています
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;
}
}
多分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);
}
}
ウェブビューで次のことを使用してください
webview.setWebChromeClient(new WebChromeClient());
次に、WebChromeClientクラスに必要なメソッドを実装します。
注:インターネットの許可が与えられていることを確認してください。
Android 9.0、
WebviewまたはImageloaderは、Android 9にはすべてのサブドメインのマニフェストファイルで有効にする必要があるネットワークセキュリティの問題があるため、URLまたは画像をロードできません。セキュリティ設定ファイルを追加できます。
<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>
すべてのサブドメインを許可する場合
<application
Android:usesCleartextTraffic="true"
...>
</application>
最初に、マニフェストファイルにインターネットアクセス許可があるかどうかを確認します。
<uses-permission Android:name="Android.permission.INTERNET" />
その後、onCreate()またはinitialize()メソッドで次のコードを追加できます。
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);
そして、webviewのコールバックを処理するクラスを作成します-
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//your handling...
return super.shouldOverrideUrlLoading(view, url);
}
}
同じクラスで、次のような他の重要なコールバックを使用することもできます-
- onPageStarted()
- onPageFinished()
- onReceivedSslError()
また、「SwipeRefreshLayout」を追加して、スワイプ更新を有効にし、Webビューを更新できます。
<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>
また、ユーザーが画面をスワイプしたときにWebビューを更新します。
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);
}
});
代替ソリューションとして:
私にとってwebView.getSettings().setUserAgentString("Android WebView")
はトリックをしました。
私はすでにインターネット許可とWebViewClient
ならびにWebChromeClient
を実装しました
最も簡単な解決策は、Webビューを含むXMLレイアウトに移動することです。 Android:layout_widthとAndroid:layout_heightを「wrap_content」から「match_parent」に変更します。
<WebView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/webView"/>
私の場合、以下の関数をWebViewClientに追加するとエラーが修正されました。関数は次のとおりです。onReceivedSslError
およびDepricatedおよびshouldOverrideUrlLoading
の新しいAPIバージョン
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();
}
});