【问题标题】:Android WebView app crashing in emulator: null Application Context?Android WebView 应用程序在模拟器中崩溃:null 应用程序上下文?
【发布时间】:2015-10-01 21:37:57
【问题描述】:

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

这是 logcat 输出(错误级别):

10-01 13:59:27.813  14114-14114/com.company.app E/SysUtils﹕ ApplicationContext is null in ApplicationStatus
10-01 13:59:27.832  14114-14114/com.company.app E/libEGL﹕ validate_display:255 error 3008 (EGL_BAD_DISPLAY)
10-01 13:59:27.832  14114-14114/com.company.app E/libEGL﹕ validate_display:255 error 3008 (EGL_BAD_DISPLAY)
10-01 13:59:27.832  14114-14114/com.company.app E/chromium﹕ [ERROR:gl_surface_egl.cc(327)] No suitable EGL configs found.
10-01 13:59:27.832  14114-14114/com.company.app E/chromium﹕ [ERROR:gl_surface_android.cc(23)] GLSurfaceEGL::InitializeOneOff failed.
10-01 13:59:27.832  14114-14114/com.company.app E/chromium﹕ [ERROR:browser_main_loop.cc(698)] GLSurface::InitializeOneOff failed
10-01 13:59:27.854  14114-14114/com.company.app E/DataReductionProxySettingListener﹕ No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp
10-01 13:59:28.530  14114-14165/com.company.app A/chromium﹕ [FATAL:gl_surface_android.cc(58)] Check failed: kGLImplementationNone != GetGLImplementation() (0 vs. 0)
10-01 13:59:28.530  14114-14165/com.company.app A/libc﹕ Fatal signal 6 (SIGABRT), code -6 in tid 14165 (GpuThread)

我假设与 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>

MainActivity.java

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

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

【问题讨论】:

  • &lt;uses-permission android:name="android.permission.INTERNET" /&gt;移出&lt;application&gt;标签。
  • 谢谢@ozbek。这是其中的一部分。

标签: java android webview


【解决方案1】:

这是 logcat 的输出

这不是a Java stack trace,因此不是您要查找的内容。

我假设与 ApplicationContext 相关的第一个错误是其他错误的原因,但我不确定

即使是运行良好的应用程序,您也会看到一些虚假消息。

如果不是,那是什么?

正如 ozbek 所说,your &lt;uses-permission&gt; element needs to be moved outside of &lt;application&gt; and made a direct child of &lt;manifest&gt;。您的 Java 堆栈跟踪应提及缺少 INTERNET 权限。

可能还有其他问题,但这绝对是一个。

【讨论】:

  • 谢谢。清单更改是解决方案的一部分,之后修复了应用程序实际启动然后崩溃,而不是在启动前崩溃。另一部分是更新 AVD 以使用本机 GPU。感谢帮助。你是对的......关于 null ApplicationContext 的 logcat 消息是无关紧要的。
  • “另一部分是更新 AVD 以使用本机 GPU。”谢谢!这对我有帮助。
  • &lt;uses-permission&gt;我怎么忘记了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2012-09-13
  • 2011-03-20
  • 2023-03-12
  • 2015-09-28
  • 2014-04-02
  • 1970-01-01
相关资源
最近更新 更多