到目前为止,没有人能够提供解决该问题的答案或解决方案。我希望有人有所作为,因为我很茫然。而且这篇文章(What is a NullPointerException, and how do I fix it?),即使每个人都一直将其推荐为“空异常”的“指南”,但由于与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" />
答案 0 :(得分:0)
好吧,我终于找到了解决问题的公式。我删除了“ webview_s”。从这一行...
webview_s = (WebView)webview_s.findViewById(R.id.webview_sega);
所以它变成了...
webview_s = (WebView) findViewById(R.id.webview_sega);
现在,我用于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;
}
}
}
}
我的sega布局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);
}
});
现在,我的其他Web视图的设置方式相同,它们可以正确显示WebView活动,但是该站点的URL未在视图中呈现。我没有收到错误消息,因为该应用程序正在显示活动,只是webView活动未正确显示内容。它正确显示了sega url,但其他所有都不显示(音乐流链接和facebook / twitter墙)。有关另一个主题的问题。