java - Android WebView 不加载 URL?

标签 java android android-webview

我有一个 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;
}

当我开始我的 Activity 时,屏幕是空的。

注意:这不是布局问题。请不要评论布局并关注真正的问题。

如何在 WebView 中加载上述 url?

编辑:这里是我给的权限:

    <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)

最佳答案

第一个问题是你必须调换 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里面,必须事先声明好view id,这样才能在上面(右,左同理)布局另一个view。

又是同一行:

android:layout_above="@+id/progressBar"

在一个 RelativeView 中,一个 View 不能在上面(或下面,从左到右)布局到一个没有生成的 ID。

你会

@+id/progressBar

IDE会自动生成一个新的ID,这个ID和你说的上面要布局的WebView的ID是不一样的。在您的 ProgressBar 声明中,您再次@+id/progressBar,它将重新生成另一个 id。

所以,你的 WebView 布局在上面什么都没有,你甚至看不到 WebView,它可能会加载 URL,你就是看不到它。

祝你好运。

关于java - Android WebView 不加载 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32353876/

相关文章:

android - 不应调用 WebView.addJavascriptInterface

android - 如何在 Android 的 webView 中加载 img 标签?

带有 openSSL key 的 Java SSLServerSocketFactory

java - 运行示例项目时无法识别的 VM 选项 'UseConcMarkSweepGC'

android - 应用程序意外停止。请再试一次

来自数据库的 Android 微调器数据

Java 缓存 String.split 正则表达式

java - Java < 15 和 >= 15 的不同 Nashorn 引擎?

android - 使用 OpenGL 将位图绘制到 VideoFrame

java - Android WebView : display only some part of website