WebView Android app de s'écraser dans l'émulateur: null Contexte de l'Application?
Je suis l'élaboration d'un très simple application Android sur un Mac en AndroidStudio et j'ai créé un AVD basé sur le Nexus S. L'application compile sans problèmes, l'émulateur se lance et puis j'ai des erreurs dans le logcat et l'application se bloque. Dans l'émulateur, une boîte de dialogue d'erreur s'affiche avec le message "Malheureusement Application a cessé de"
Voici le logcat de sortie (niveau d'erreur):
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)
Je suis en supposant que la première erreur liées à ApplicationContext est la cause de l'autre des erreurs, mais je ne suis pas sûr à ce sujet. J'ai essayé sur 10 différentes méthodes pour établir le contexte, mais l'ApplicationContext erreur persiste.
Mes questions principales: Est l'ApplicationContext erreur de la cause de l'accident? Si non, qu'est-ce que? Que pourrais-je essayer de le réparer?
Voici l'intégralité de l'application du code de référence:
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;
}
}
<uses-permission android:name="android.permission.INTERNET" />
de et au-dessus de <application>
tag.Merci @ozbek. C'était de la partie.
OriginalL'auteur byron | 2015-10-01
Vous devez vous connecter pour publier un commentaire.
Qui n'est pas une trace de la pile Java, et, par conséquent, n'est pas ce que vous cherchez.
Que c'est une fausse message que vous verrez, même à partir des applications qui fonctionnent très bien.
Comme ozbek notes, votre
<uses-permission>
élément doit être déplacé à l'extérieur de<application>
et fait un enfant direct de<manifest>
. Votre Java trace de la pile doit mentionner un manqueINTERNET
autorisation.Il est possible qu'il existe d'autres problèmes, mais c'est certainement l'un.
"L'autre pièce est une mise à jour de l'AVD pour utiliser natif GPU." Merci! Cet été m'a aidé.
<uses-permission>
Comment ai-je pu l'oublierOriginalL'auteur CommonsWare