Java Android WebView应用程序在emulator中崩溃:应用程序上下文为空?
我正在用AndroidStudio在Mac上开发一个非常简单的Android应用程序,我已经创建了一个基于Nexus S的AVD。该应用程序编译没有问题,模拟器启动,然后我在logcat中出错,应用程序崩溃。在模拟器中,将显示一个错误对话框,其中显示消息“不幸的是,应用程序已停止” 以下是logcat输出(错误级别): 我假设与ApplicationContext相关的第一个错误是其他错误的原因,但我不确定这一点。我尝试了大约10种不同的方法来设置上下文,但ApplicationContext错误仍然存在 我的主要问题是:ApplicationContext错误是崩溃的根本原因吗?如果没有,是什么?我可以试着做些什么来修复它 以下是完整的申请代码供参考: AndroidManifest.xmlJava Android WebView应用程序在emulator中崩溃:应用程序上下文为空?,java,android,webview,Java,Android,Webview,我正在用AndroidStudio在Mac上开发一个非常简单的Android应用程序,我已经创建了一个基于Nexus S的AVD。该应用程序编译没有问题,模拟器启动,然后我在logcat中出错,应用程序崩溃。在模拟器中,将显示一个错误对话框,其中显示消息“不幸的是,应用程序已停止” 以下是logcat输出(错误级别): 我假设与ApplicationContext相关的第一个错误是其他错误的原因,但我不确定这一点。我尝试了大约10种不同的方法来设置上下文,但ApplicationContext错
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.app" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<uses-permission android:name="android.permission.INTERNET" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MyWebViewClient.java
package com.company.app;
import android.content.Intent;
import android.net.Uri;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("company.com")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
这是logcat的输出
那不是,因此也不是你想要的
我假设与ApplicationContext相关的第一个错误是其他错误的原因,但我不确定这一点
这是一些你会看到的虚假信息,即使是运行良好的应用程序
如果没有,是什么
正如乌兹别克所指出的那样。Java堆栈跟踪应该提到缺少的INTERNET
权限
可能还有其他问题,但这肯定是一个问题。将
移出
标签,并将其置于标签上方。谢谢@ozbek。这是其中的一部分,谢谢。清单更改是解决方案的一部分,在此之后,修复了应用程序实际启动并随后崩溃,而不是启动前崩溃。另一件事是更新AVD以使用本机GPU。谢谢你的帮助。你说得对……关于null ApplicationContext的logcat消息无关紧要。“另一条消息是更新AVD以使用本机GPU。”谢谢!这对我很有帮助。
我怎么能忘记呢
package com.company.app;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebSettings;
public class MainActivity extends AppCompatActivity {
private String appUrl = "http://company.com/mobile/index.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webView);
myWebView.setWebViewClient(new MyWebViewClient());
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.loadUrl(appUrl);
}
}
package com.company.app;
import android.content.Intent;
import android.net.Uri;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("company.com")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}