Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android WebView应用程序在emulator中崩溃:应用程序上下文为空?_Java_Android_Webview - Fatal编程技术网

Java Android WebView应用程序在emulator中崩溃:应用程序上下文为空?

Java Android WebView应用程序在emulator中崩溃:应用程序上下文为空?,java,android,webview,Java,Android,Webview,我正在用AndroidStudio在Mac上开发一个非常简单的Android应用程序,我已经创建了一个基于Nexus S的AVD。该应用程序编译没有问题,模拟器启动,然后我在logcat中出错,应用程序崩溃。在模拟器中,将显示一个错误对话框,其中显示消息“不幸的是,应用程序已停止” 以下是logcat输出(错误级别): 我假设与ApplicationContext相关的第一个错误是其他错误的原因,但我不确定这一点。我尝试了大约10种不同的方法来设置上下文,但ApplicationContext错

我正在用AndroidStudio在Mac上开发一个非常简单的Android应用程序,我已经创建了一个基于Nexus S的AVD。该应用程序编译没有问题,模拟器启动,然后我在logcat中出错,应用程序崩溃。在模拟器中,将显示一个错误对话框,其中显示消息“不幸的是,应用程序已停止”

以下是logcat输出(错误级别):

我假设与ApplicationContext相关的第一个错误是其他错误的原因,但我不确定这一点。我尝试了大约10种不同的方法来设置上下文,但ApplicationContext错误仍然存在

我的主要问题是:ApplicationContext错误是崩溃的根本原因吗?如果没有,是什么?我可以试着做些什么来修复它

以下是完整的申请代码供参考:

AndroidManifest.xml

<?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;
    }
}