Android WebView не загружает URL?

У меня есть Android WebView, который должен загружать следующие URL-адреса:

https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655 https://buchung.salonmeister.de/place/#offer-details-page?id=907599&venueId=301655 

Вот что я сделал:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_orange_light" tools:context=".MainActivityFragment"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_margin="5dp" android:layout_above="@+id/progressBar"></WebView> <ProgressBar android:id="@id/progressBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:visibility="invisible" style="?android:attr/progressBarStyleHorizontal"/> <TextView android:id="@+id/titleView" android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> 

В onCreateView() :

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_main, container, false); String url = // some url final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar); progressBar.setMax(100); final TextView titleView = (TextView)v.findViewById(R.id.titleView); mWebView = (WebView)v.findViewById(R.id.webView); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setAllowFileAccess(true); mWebView.getSettings().setAllowContentAccess(true); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int progress) { if (progress == 100) { progressBar.setVisibility(View.INVISIBLE); progressBar.setProgress(0); } else { progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(progress); } } @Override public void onReceivedTitle(WebView view, String title) { titleView.setText(title); } }); mWebView.loadUrl(url); return v; } 

Когда я начинаю свою деятельность, экран пуст.

Примечание. Это не проблема макета. Пожалуйста, не комментируйте макет и не сосредоточьтесь на реальной проблеме.

Как загрузить вышеуказанные URL-адреса в WebView?

Изменить: Вот разрешения, которые я дал:

  <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Редактировать:

В моей консоли я получаю следующее:

 I/chromium: [INFO:CONSOLE(84)] "undefined", source: https://buchung.salonmeister.de/place/ (84) 09-13 15:12:33.230 28407-28407/de.test.webviewtest I/chromium: [INFO:CONSOLE(1)] "Uncaught Error: Script error for: widget/venue-menu/mobile/venue-menu-app 09-13 15:12:33.230 28407-28407/de.test.webviewtest I/chromium: http://requirejs.org/docs/errors.html#scripterror", source: https://buchung.salonmeister.de/javascript-module/1.162.3/thirdparty/require.2.1.10.js (1) 

Solutions Collecting From Web of "Android WebView не загружает URL?"

Первая проблема заключается в том, что вам необходимо поменять положение ProgressBar и WebView.

 <ProgressBar android:id="@id/progressBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:visibility="invisible" style="?android:attr/progressBarStyleHorizontal"/> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_margin="5dp" android:layout_above="@id/progressBar"/> 

Вторая проблема заключается в этой строке:

 android:layout_above="@+id/progressBar" 

Внутри RelativeLayout вы должны заранее объявить идентификатор вида, чтобы другое представление можно было развернуть выше (справа, слева – одинаково).

И снова та же линия:

 android:layout_above="@+id/progressBar" 

Внутри RelativeView представление не может размещать выше (или ниже, слева направо) на идентификатор, который генерируется ни для чего.

Вы делаете

 @+id/progressBar 

IDE будет автоматически генерировать новый идентификатор, этот идентификатор не является тем же самым идентификатором, который вы имеете в виду как WebView для макета выше. И в вашем объявлении ProgressBar снова @ + id / progressBar, который будет повторно генерировать другой идентификатор.

Таким образом, ваш WebView не имеет ничего общего, вы даже не видите WebView, он может загружать URL-адреса, и вы просто не можете его увидеть.

Удачи.

UPDATE: с setJavaScriptEnabled(false); , В WebView может успешно отображаться URL-адрес "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655" .

Введите описание изображения здесь

 public class WebViewActivityFragment extends Fragment { public WebViewActivityFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //return inflater.inflate(R.layout.fragment_web_view, container, false); View v = inflater.inflate(R.layout.fragment_web_view, container, false); final String url = "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655";//"https://google.com.vn"; final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar); progressBar.setMax(100); final TextView titleView = (TextView)v.findViewById(R.id.titleView); WebView mWebView = (WebView) v.findViewById(R.id.webView); mWebView.setInitialScale(1); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); mWebView.getSettings().setJavaScriptEnabled(false); mWebView.getSettings().setAllowFileAccess(true); mWebView.getSettings().setAllowContentAccess(true); mWebView.setScrollbarFadingEnabled(false); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int progress) { if (progress == 100) { progressBar.setVisibility(View.INVISIBLE); progressBar.setProgress(0); } else { progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(progress); } } @Override public void onReceivedTitle(WebView view, String title) { titleView.setText(title); } }); mWebView.loadUrl(url); return v; } } 

Я использовал весь ваш код, вот мой результат веб-представления. Я думаю, что, возможно, этот веб-сайт не готов для мобильных устройств, потому что я пытался открыть ваши 2 URL-адреса в веб-браузере в телефоне с той же проблемой (по-прежнему загружаю …)

Введите описание изображения здесь

Если вы хотите, вы можете попробовать использовать Неопределенный индикатор строки выполнения и удалить setWebChromeClient, попробуйте этот код:

 public class WebViewActivityFragment extends Fragment { public WebViewActivityFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //return inflater.inflate(R.layout.fragment_web_view, container, false); View v = inflater.inflate(R.layout.fragment_web_view, container, false); final String url = "https://buchung.salonmeister.de/ort/301655/menue/#offerId=907601&venueId=301655";//"https://google.com.vn"; final ProgressBar progressBar = (ProgressBar)v.findViewById(R.id.progressBar); progressBar.setMax(100); progressBar.setVisibility(View.GONE); final TextView titleView = (TextView)v.findViewById(R.id.titleView); WebView mWebView = (WebView) v.findViewById(R.id.webView); mWebView.setInitialScale(1); mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); mWebView.getSettings().setJavaScriptEnabled(false); mWebView.getSettings().setAllowFileAccess(true); mWebView.getSettings().setAllowContentAccess(true); mWebView.setScrollbarFadingEnabled(false); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onPageFinished(WebView view, String url) { progressBar.setVisibility(View.GONE); progressBar.setProgress(100); super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(0); super.onPageStarted(view, url, favicon); } }); mWebView.loadUrl(url); return v; } 

}

Ваш URL-адрес – https, поэтому это ssl-проблема.

Вы можете найти решение в другом вопросе .

 mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverride UrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors } }); 

Убедитесь, что вы помещаете все разрешения в файл манифеста за пределы тега приложения.

Это может решить вашу проблему:

 webView.post(new Runnable() { @Override public void run() { webView.loadUrl(url); } });