【问题标题】:Webview causing app to crash instantly on launchWebview 导致应用程序在启动时立即崩溃
【发布时间】:2021-10-20 19:58:44
【问题描述】:

我正在尝试创建一个 WebView 应用程序,该应用程序的行为类似于 Facebook Messenger 聊天气泡,它可以使用以下 github 项目覆盖在其他应用程序之上: https://github.com/siddharth2010/Bubbles

我下载了项目并启动了它,它使用默认参数运行良好,但是当单击“气泡”时,我希望它显示一个网站,而不是它当前具有的占位符图像和文本。

以下是我所做的修改:

sample_view.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView android:id="@+id/webView"
        android:layout_height="match_parent"
        android:layout_width="match_parent" />

</RelativeLayout>

MainActivity.java

package com.irunawiki.irunawiki;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.irunawiki.bubbles.FloatingBubblePermissions;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView view = (WebView) findViewById(R.id.webView);
        view.getSettings().setJavaScriptEnabled(true);
        view.getSettings().getDomStorageEnabled();
        view.setWebViewClient(new WebViewClient());
        view.loadUrl("https://google.com");

        FloatingBubblePermissions.startPermissionRequest(this);
        View startBubble = findViewById(R.id.start_bubble);
        startBubble.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startService(new Intent(getApplicationContext(), SimpleService.class));
            }
        });
    }
}

AndroidManifest.xml

added these:
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

尝试在虚拟机或实际设备中运行它会导致立即崩溃。

奇怪的是,它启动时才发现 WebView view = (WebView) findViewById(R.id.webView); 未注释,但任何 getSettings、setWebViewClient、loadUrl 都会导致应用在启动时立即崩溃。

究竟是什么导致了崩溃?我对 Android 开发还很陌生,但是经过数小时查找具有类似问题的 stackoverflow 帖子后,我无法使其正常工作...

【问题讨论】:

    标签: java android android-studio webview android-webview


    【解决方案1】:

    我认为您的 activity_main 布局中没有 start_bubble 视图。

    您应该将按钮添加到您的 activity_main,然后您应该将此行更改为此。

    View startBubble = findViewById(R.id.start_bubble);

    Button startBubble = findViewById(R.id.start_bubble);

    【讨论】:

    • 实际上 activity_main 与 github 存储库中的相同,它包含一个 ID 为“start_bubble”的按钮。我尝试将 View startBubble 更改为 Button startBubble,仍然发生相同的崩溃,但是我被告知使用 logcat 来调试究竟是什么原因,并且以下错误似乎导致了崩溃:“无法启动活动 ComponentInfo{com. irunawiki.irunawiki/com.irunawiki.irunawiki.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.webkit.WebView.loadUrl(java.lang.String)”
    • 崩溃是正常的,因为你的activity_main布局中没有webview。您试图在 activity_main 中访问 webview。
    • 是的,原来是这样,我正在寻找一个不在当前布局中的 ID,谢谢!
    【解决方案2】:

    事实证明,我试图在导致崩溃的非活动布局中选择一个 webview,解决方法是简单地选择其中包含 webview 的布局

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2015-06-09
      • 1970-01-01
      相关资源
      最近更新 更多