我有一个问题:
在我的Android应用程序中,有一个包含WebVIEw的活动.此WebVIEw包含播放的Flash内容.当我将此应用程序切换到我的主屏幕时,Flash内容在后台运行顺畅.当我切换到主屏幕然后关闭屏幕时,Flash内容也在运行.但是当我关闭屏幕时,当我在App本身时,WebVIEw会抛出一个NullPointerException,如下文末尾所示.我真的不知道如何解决这个问题.我希望有人可以帮助我.
编辑:我为AndroID 2.2开发.经过一些测试我发现了一些特别的东当我在运行应用程序时关闭屏幕时,我得到了提到的异常,但是当我及时重新打开屏幕时,我“仅”得到以下异常.我知道这没什么特别的,已经知道,但也许有帮助.
05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): FATAL EXCEPTION: main05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): java.lang.NullPointerException05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.webkit.WebVIEw.requestFocus(WebVIEw.java:6737)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwGroup.onRequestFocusInDescendants(VIEwGroup.java:1085)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwGroup.requestFocus(VIEwGroup.java:1041)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwGroup.onRequestFocusInDescendants(VIEwGroup.java:1085)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwGroup.requestFocus(VIEwGroup.java:1041)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwGroup.onRequestFocusInDescendants(VIEwGroup.java:1085)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwGroup.requestFocus(VIEwGroup.java:1044)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEw.requestFocus(VIEw.java:3671)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwRoot.performTraversals(VIEwRoot.java:1224)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.vIEw.VIEwRoot.handleMessage(VIEwRoot.java:1870)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.os.Handler.dispatchMessage(Handler.java:99)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.os.Looper.loop(Looper.java:130)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at androID.app.ActivityThread.main(ActivityThread.java:3694)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at java.lang.reflect.Method.invokeNative(Native Method)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at java.lang.reflect.Method.invoke(Method.java:507)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:599)05-27 07:46:10.067: ERROR/AndroIDRuntime(8064): at dalvik.system.NativeStart.main(Native Method)
以下是创建WebVIEw的方法:
protected voID onCreate(Bundle savedInstanceState){ // Todo auto-generated method stub super.onCreate(savedInstanceState); setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); requestwindowFeature(Window.FEATURE_NO_Title); this.getwindow().setFlags(WindowManager.LayoutParams.FLAG_FulLSCREEN,WindowManager.LayoutParams.FLAG_FulLSCREEN); setContentVIEw(R.layout.externalplayer); final Intent j = this.getIntent(); webvIEw = (WebVIEw)findVIEwByID(R.ID.webvIEw); webvIEw.getSettings().setJavaScriptEnabled(true); webvIEw.getSettings().setAllowfileAccess(true); webvIEw.getSettings().setPluginsEnabled(true); webvIEw.freeMemory(); webvIEw.setPictureListener(new picListener()); webvIEw.setWebVIEwClIEnt(new WebVIEwClIEnt(){ @OverrIDe public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw,String url){ return true; } }); if(Controller.unBUGgedStart == true){ Controller.unBUGgedStart = false; webvIEw.destroy(); } else{ Controller.unBUGgedStart = true; d = ProgressDialog.show(externalPlayer.this,"Loading...","Wait a moment..."); webvIEw.loadUrl(j.getCharSequenceExtra("link").toString()); }}05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): FATAL EXCEPTION: main05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxApp}: java.lang.NullPointerException05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:1655)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1671)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread.handle@R_211_4404@Activity(ActivityThread.java:2840)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread.access00(ActivityThread.java:117)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:935)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.os.Handler.dispatchMessage(Handler.java:99)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.os.Looper.loop(Looper.java:130)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread.main(ActivityThread.java:3694)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at java.lang.reflect.Method.invokeNative(Native Method)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at java.lang.reflect.Method.invoke(Method.java:507)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:599)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at dalvik.system.NativeStart.main(Native Method)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): Caused by: java.lang.NullPointerException05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.webkit.WebVIEw.requestFocus(WebVIEw.java:6737)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.vIEw.VIEw.requestFocus(VIEw.java:3671)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.vIEw.VIEw.requestFocus(VIEw.java:3649)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at com.androID.internal.policy.impl.PhoneWindow.restoreHIErarchyState(PhoneWindow.java:1497)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.Activity.onRestoreInstanceState(Activity.java:844)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.Activity.performRestoreInstanceState(Activity.java:816)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:1633)05-26 20:13:29.825: ERROR/AndroIDRuntime(4754): ... 12 more
最佳答案好的,我解决了这个问题.解决方案的线索是屏幕方向.就像你在第一篇文章的代码中看到的那样,我调用了onCreate()方法:setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
此调用的结果是,由于方向更改,活动被调用了两次.这就是我使用的原因:
if(Controller.unBUGgedStart == true){ Controller.unBUGgedStart = false; webvIEw.destroy(); } else{ Controller.unBUGgedStart = true; d = ProgressDialog.show(externalPlayer.this,"Wait a moment..."); webvIEw.loadUrl(j.getCharSequenceExtra("link").toString()); }
此代码阻止WebVIEw两次启动.您可以看到我销毁了两个创建的WebVIEw中的一个.现在,当我关闭屏幕时, *** 作系统想要调用被破坏的WebVIEw,这会导致NullPointerException.
我超越了我的onCreate方法的机制并改变了它.现在,清单中描述了方向:
androID:screenorIEntation="landscape"
经过这次修改后,问题并未解决.当我关闭屏幕时, *** 作系统再次使用WebVIEw启动了Activity,因为当我关闭屏幕时,方向从Landscape切换到Portrait.我在Manifest中添加了以下内容:
androID:configChanges="keyboardHIDden|orIEntation"
现在一切都很完美. 总结
以上是内存溢出为你收集整理的android – WebView上的NullPointerException(WebView.requestFocus())全部内容,希望文章能够帮你解决android – WebView上的NullPointerException(WebView.requestFocus())所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)