Reputation: 3967
I am having hard time running webview using my application as it crashes the app right way.
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 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>
Inside my manifest i am targeting sdk version as 17
Manifest goes here
<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>
Also my logcat output shows as follow
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
Upvotes: 0
Views: 1766
Reputation: 6899
And also dont forget to use "android:hardwareAccelerated=true"
in android manifest file
especially for android 4 and above.
Upvotes: 0
Reputation: 30855
Your code
public void onCreate(Bundle icicle) {
setContentView(R.layout.activity_video_play);
Now put the comment this setContentView() statement as no need and add new statement
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
//setContentView(R.layout.activity_video_play);
As the request for the another window feature must set prior to set the content view so window was prepared for the content view which you are using it. Another point is either you used Layout for setContentView()
or just put single component in this as you are using both first used the layout and then last set the webview
this was over write the layout with webview
Upvotes: 0
Reputation: 23638
Try to change as below :
setContentView(R.layout.activity_video_play); getWindow().requestFeature(Window.FEATURE_PROGRESS);
Use this way instead:
getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.activity_video_play);
Upvotes: 2
Reputation: 54322
Try this way,
public void onCreate(Bundle icicle) {
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.activity_video_play);
its because, requestFeature() must be called before calling setContentView();
Upvotes: 1