2015-10-01 48 views
4

我正在AndroidStudio的Mac上開發一個非常簡單的Android應用程序,並且我已經創建了一個基於Nexus S的AVD。該應用程序編譯時沒有問題,模擬器啓動,然後我在logcat中遇到錯誤,應用程序崩潰。在模擬器中,錯誤對話框顯示消息「不幸的是應用程序已經停止」Android WebView應用程序在模擬器中崩潰:null應用程序上下文?

下面是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; 
    } 
} 
+2

在''標籤之外移動'<使用權限android:name =「android.permission.INTERNET」/>'標籤。 – ozbek

+0

謝謝@ozbek。那是它的一部分。 – byron

回答

4

這裏的logcat的輸出

這不是a Java stack trace,因此是不是你要找的東西。

我假設相關的ApplicationContext的第一個錯誤是另一個錯誤的原因,但我不知道這一點

也就是說一些虛假的信息,你會看到,即使從運行良好的應用程序。

如果不是,那是什麼?

正如ozbek所示,your <uses-permission> element needs to be moved outside of <application> and made a direct child of <manifest>。您的Java堆棧跟蹤應提及缺少的INTERNET權限。

可能還有其他問題,但這絕對是一個問題。

+2

謝謝。清單更改是解決方案的一部分,之後修復應用程序實際啓動,然後崩潰,而不是在發佈前崩潰。另一部分是更新AVD以使用原生GPU。感謝幫助。你是對的...關於null ApplicationContext的logcat消息是不相關的。 – byron

+2

「另一塊是更新AVD以使用原生GPU。」 謝謝!這幫助了我。 – Dmitry

+0

'<使用權限>'我怎麼能忘記它 – Prabs