0

到目前为止,没有人能够提供解决此问题的答案或解决方案。我希望有人能有所贡献,因为我不知所措。还有这篇文章(什么是 NullPointerException,我该如何解决?),即使每个人都一直推荐它作为“空异常”的“指南”,但我发现它很难适用于我的情况,因为它涉及webView 和我在下面的 java 脚本中提供的设置。

如果我从活动中删除 webView 行,活动的页面会在应用程序中正常加载。当然,全白且没有内容,但它会加载。一旦我将 webView 代码添加回活动;该应用程序在尝试加载时立即崩溃。虽然它看起来崩溃了,但该应用程序实际上以全白加载了活动页面,并在没有关闭的情况下将自己扔到设备的背景中,并弹出一条通知,说明应用程序已经崩溃了。它并没有真正退出应用程序,它只是将它扔到后台并发送一条错误消息。所以我相信在查看我的webView相关代码时可以找到补救措施,但是我找不到它并且之前推荐的方法都没有补救它。我应该注意到,这发生在我实际连接的设备和 Android Studio 的模拟器上,

这是我的 LogCat

05-08 14:19:03.423 31797-31797/com.app.sega E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.sega, PID: 31797
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.sega/com.app.sega.sega}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.webkit.WebView.findViewById(int)' on a null object reference

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.webkit.WebView.findViewById(int)' on a null object reference
        at com.app.sega.sega.onCreate(sega.java:18)

我刚刚更新了下面的文件内容以尝试解决此问题。这就是我现在所拥有的。得到相同的结果。

sega.java 中新活动的 webView 脚本

package com.app.sega;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;

public class sega extends AppCompatActivity {
    private WebView webview_s;

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

        webview_s = (WebView)webview_s.findViewById(R.id.webview_sega);
        webview_s.getSettings().getJavaScriptEnabled();
        webview_s.setWebViewClient(new WebViewClient_s());
        webview_s.setInitialScale(1);
        webview_s.getSettings().getBuiltInZoomControls();
        webview_s.getSettings().getUseWideViewPort();

    }

    private class WebViewClient_s extends WebViewClient {

        public boolean shouldOverrideURLLoading (WebView view, String url) {
            if (Uri.parse(url).getHost().equals("www.southeastgeorgiatoday.com")) {
                return false;
            }else {
                Intent intent_sega = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent_sega);
                return true;
            }

        }
    }
}

我在 (sega.java:18) 上看不到任何空/空的内容。这是第 18 行的内容:

        webview_s = (WebView)webview_s.findViewById(R.id.webview_sega);

哪里有空条目?这是位于 activity_sega.xml 中的 webView xml。你可以看到我在上面的java代码中输入了正确的webView id。

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

1 回答 1

0

好吧,我终于找到了成功的公式。我删除了“webview_s”。从这条线...

webview_s = (WebView)webview_s.findViewById(R.id.webview_sega);

以至于变成了……

webview_s = (WebView) findViewById(R.id.webview_sega);

现在我的世嘉活动的整个java脚本看起来像......

package com.app.sega;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;

public class sega extends AppCompatActivity {
    private WebView webview_s;

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

        webview_s = (WebView) findViewById(R.id.webview_sega);
        webview_s.setWebViewClient(new WebViewClient_s());
        webview_s.setInitialScale(1);
        webview_s.getSettings().getJavaScriptEnabled();
        webview_s.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webview_s.getSettings().getBuiltInZoomControls();
        webview_s.getSettings().getUseWideViewPort();
        webview_s.loadUrl("http://www.southeastgeorgiatoday.com");
    }

    private class WebViewClient_s extends WebViewClient {

        public boolean shouldOverrideURLLoading (WebView view, String url) {
            if (Uri.parse(url).getHost().equals("www.southeastgeorgiatoday.com")) {
                return false;
            }else {
                Intent intent_sega = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent_sega);
                return true;
            }
        }
    }
}

我的世嘉布局xml看起来像......

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

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

</LinearLayout>

清单看起来像......

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.app.sega">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".facebook" android:parentActivityName=".MainActivity" />
        <activity android:name=".twitter" android:parentActivityName=".MainActivity" />
        <activity android:name=".wyum" android:parentActivityName=".MainActivity" />
        <activity android:name=".wtcq" android:parentActivityName=".MainActivity" />
        <activity android:name=".wvop" android:parentActivityName=".MainActivity" />
        <activity android:name=".sega" android:parentActivityName=".MainActivity" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我的 sega ImageView 按钮的主要活动布局,它在单击时加载 sega 活动看起来像......

<ImageView
        android:id="@+id/s"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="16dp"
        android:adjustViewBounds="true"
        android:clickable="true"
        android:autoLink="web"
        android:contentDescription="@string/southeast_georgia_today_official_site"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:longClickable="true"
        android:onClick="@android:string/copyUrl"
        android:scaleType="fitXY"
        android:visibility="visible"
        app:layout_constraintBottom_toTopOf="@+id/y"
        app:layout_constraintEnd_toStartOf="@+id/v"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/s"
        tools:visibility="visible" />

主要活动上该 ImageButton 的 java 脚本看起来像......

        ImageView img_s = (ImageView) findViewById(R.id.s);
        img_s.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent_s = new Intent(MainActivity.this, sega.class);
                startActivity(intent_s);
            }
        });

现在我的其他 webviews 以相同的方式设置,它们正确显示 webView 活动,但站点/url 未在视图中呈现。我没有收到错误,因为应用程序正在显示活动,只是 webView 活动没有正确显示内容。它正确显示了世嘉 url,但没有其他(音乐流链接和 facebook/twitter 墙)。另一个话题的问题。

于 2019-05-09T15:25:32.730 回答