我很难用我的应用程序运行webview,因为它正确地崩溃了应用程序。
爪哇
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 CODE
<?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
Manifest到这里
<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输出也显示如下
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 :(得分:2)
尝试更改如下:
的setContentView(R.layout.activity_video_play); 。getWindow()requestFeature(Window.FEATURE_PROGRESS);
改为使用这种方式:
getWindow()requestFeature(Window.FEATURE_PROGRESS)。 的setContentView(R.layout.activity_video_play);
答案 1 :(得分:1)
试试这种方式,
public void onCreate(Bundle icicle) {
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.activity_video_play);
因为,在调用setContentView();
答案 2 :(得分: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
这已经覆盖了{{1}的布局}
答案 3 :(得分:0)
也不要忘记在android清单文件中使用"android:hardwareAccelerated=true"
特别适用于Android 4及以上版本。