2013-01-24 51 views
0

我很難用我的應用程序運行webview,因爲它崩潰的應用程序正確的方式。Android WebView崩潰應用程序在Android 4.0 +

的Java

package com.unext.unextlibrary; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Window; 
import android.webkit.JavascriptInterface; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 


    @SuppressLint("SetJavaScriptEnabled") 
    public class InitializeVideo extends Activity { 

WebView mWebview; 

@Override 
@JavascriptInterface 
public void onCreate(Bundle icicle) { 
    setContentView(R.layout.activity_video_play); 

    getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    mWebview = new WebView(this); 

    mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 

    final Activity activity = this; 

    mWebview.setWebViewClient(new WebViewClient() { 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    mWebview .loadUrl("http://www.google.com"); 
    setContentView(mWebview); 
} 
} 

XML代碼

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#000000" 
android:orientation="vertical" > 

<android.webkit.WebView android:id="@+id/WebView" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
</android.webkit.WebView> 

</LinearLayout> 

在我的清單我指定的SDK版本爲17

清單放在這裏

<uses-sdk 
    android:minSdkVersion="14" 
    android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.INTERNET"/> 

<activity 
     android:theme="@style/Theme.Video" 
     android:configChanges="orientation|screenSize" 
     android:name="com.unext.unextlibrary.InitializeVideo" 
     android:label="@string/app_name" > 
    </activity> 

而且我logcat的輸出秀S作爲遵循

01-24 07:11:09.091: E/AndroidRuntime(2457): FATAL EXCEPTION: main 
    01-24 07:11:09.091: E/AndroidRuntime(2457): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.unext.unextlibrary/com.unext.unextlibrary.InitializeVideo}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.os.Looper.loop(Looper.java:137) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at java.lang.reflect.Method.invokeNative(Native Method) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at java.lang.reflect.Method.invoke(Method.java:511) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at dalvik.system.NativeStart.main(Native Method) 
    01-24 07:11:09.091: E/AndroidRuntime(2457): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:229) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at com.unext.unextlibrary.InitializeVideo.onCreate(InitializeVideo.java:24) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.Activity.performCreate(Activity.java:5104) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
    01-24 07:11:09.091: E/AndroidRuntime(2457):  ... 11 more 
+0

調用此getWindow()。requestFeature(Window.FEATURE_PROGRESS); 之前setContentView – VendettaDroid

回答

1

嘗試這種方式,

public void onCreate(Bundle icicle) { 
getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    setContentView(R.layout.activity_video_play); 

其原因,requestFeature()必須在調用setContentView();

+0

燁工作,你能解釋爲什麼嗎? –

+0

真的很抱歉。我甚至從文檔中找不到很多信息,除此之外,http://developer.android.com/reference/android/view/Window.html#requestFeature%28int%29 –

2

嘗試前被要求如下改變:

的setContentView (R.layout.activity_video_play); getWindow()。requestFeature(Window.FEATURE_PROGRESS);

用這種方式來代替:

getWindow()requestFeature(Window.FEATURE_PROGRESS)。 setContentView(R.layout.activity_video_play);

0

您的代碼

public void onCreate(Bundle icicle) { 
    setContentView(R.layout.activity_video_play); 

現在把註釋本的setContentView()語句,因爲沒有必要,並添加新的語句

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    //setContentView(R.layout.activity_video_play); 

至於另一個窗口功能要求必須設置之前,設置內容視圖,以便爲您正在使用的內容視圖準備好窗口。還有一點就是無論你使用的佈局setContentView()或只是把單個組件在本作使用的是兩個首先使用的佈局,然後最後設置webview這是在寫佈局webview

0

而且也不要忘記使用"android:hardwareAccelerated=true"在Android清單文件中

尤其適用於Android 4及以上版本。