本文将介绍FragmentManager中的NullPointerException的详细情况,特别是关于formationnull的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了
本文将介绍FragmentManager中的NullPointerException的详细情况,特别是关于formation null的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Android FragmentManager BackStackRecord.run引发NullPointerException、android FragmentManager replace 报 java.lang.IllegalArgumentException: No view found for id、Android OS 3.2上的WindowManagerImpl中的NullPointerException、android – ContextWrapper.getResources()中的NullPointerException的知识。
本文目录一览:- FragmentManager中的NullPointerException(formation null)
- Android FragmentManager BackStackRecord.run引发NullPointerException
- android FragmentManager replace 报 java.lang.IllegalArgumentException: No view found for id
- Android OS 3.2上的WindowManagerImpl中的NullPointerException
- android – ContextWrapper.getResources()中的NullPointerException
FragmentManager中的NullPointerException(formation null)
我正在使用Android兼容性库,偶尔会感到奇怪NullPointerException
:
java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:960)
at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:768)
at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1104)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:410)
at android.support.v4.content.Loader.deliverResult(Loader.java:103)
at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:81)
at android.support.v4.content.CursorLoader.onStartLoading(CursorLoader.java:126)
at android.support.v4.content.Loader.startLoading(Loader.java:197)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.start(LoaderManager.java:262)
at android.support.v4.app.LoaderManagerImpl.doStart(LoaderManager.java:710)
at android.support.v4.app.Fragment.onStart(Fragment.java:981)
at android.support.v4.app.Fragment.performStart(Fragment.java:1332)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906)
at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1240)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:612)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
at android.support.v4.view.ViewPager.populate(ViewPager.java:804)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:433)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:405)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:386)
...
显然,我在做 一些
错误的操作,以允许FragmentManager
它进入可能会像这样崩溃的状态,但是我不知道该怎么办。在相关的代码中FragmentManagerImpl
没有提供我任何线索。我猜mActivity
是某种null
在代码中的那一点?但这似乎是不可能的,因为该活动已经在屏幕上了,并且我没有在其中添加任何片段-
只需在中进行切换即可ViewPager
。
Android FragmentManager BackStackRecord.run引发NullPointerException
使用片段时,有时会出现以下异常:
FATAL EXCEPTION: mainjava.lang.NullPointerException at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:591) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)
当通过尝试从管理器中删除片段时run()
,BackStackRecord
会通过调用of
发生异常execPendingTransactions()
。
case OP_REMOVE: { Fragment f = op.fragment; f.mNextAnim = op.exitAnim; <---- mManager.removeFragment(f, mTransition, mTransitionStyle);}break;
我似乎无法弄清楚到底是什么原因造成的?我认为这与删除碎片时未正确清理碎片的堆栈有关。
答案1
小编典典回答我自己的问题:
(最终)在您致电FragmentTransaction.remove(null);
和FragmentTransaction.commit();
编辑:而且,就像两次圈出和ShinyuX在评论中指出的一样; 当调用show(null)
oradd(null)
,attach(null)
and detach(null)
方法时,可能还hide(null)
调用后commit()
,事务将在FragmentManager中排队。结果,当您在显式调用后正在处理该操作时FragmentManager.executePendingTransactions()
,或者在FragmentManager队列线程对其进行调用时,它将引发NullPointerException
。
就我而言,我是在全局对象中维护碎片状态。在那里,我检查了片段是否显示,然后删除了可见的片段。但是因为我启动了一个新的FragmentActivity,所以这些状态在不可见时仍设置为true。所以这是一个设计错误。
除了解决设计错误外,解决方案还很简单:在删除片段之前检查是否FragmentManager.findFragmentByTag()
返回null
。
android FragmentManager replace 报 java.lang.IllegalArgumentException: No view found for id
问题:
layout中使用了include,通过FragmentManager的replace把include的子Framelayout作为fragment container。由于include标签设置了id(开启ViewBinding需要)而且与include layout布局中的根布局id不一样。在执行replace时报找不到container id: java.lang.IllegalArgumentException: No view found for id
解决办法:
办法一:replace参数container id直接设置成include标签的id
办法二:在include layout 子布局中再套一层布局,最外层布局不要设置id或者不要设置成replace container id
Android OS 3.2上的WindowManagerImpl中的NullPointerException
例外是:
FATAL EXCEPTION: main java.lang.NullPointerException at android.view.WindowManagerImpl.reportNewConfiguration(WindowManagerImpl.java:427) at android.app.ActivityThread.handleUpdatePackageCompatibilityInfo(ActivityThread.java:2801) at android.app.ActivityThread.access$2700(ActivityThread.java:122) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:132) at android.app.ActivityThread.main(ActivityThread.java:4123) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:491) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) at dalvik.system.NativeStart.main(Native Method)
我的测试代码:
TestActivity.java(由Wizerd生成)
package com.test; import android.app.Activity; public class TestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = new Intent(this,TestService.class); startService(intent); } }
TestService.java(大多数函数都是空的)
Package com.test; import android.content.ComponentName; public class TestService extends Service { private boolean m_connected = false; private ServiceConnection m_connInitService = new ServiceConnection() { public void onServiceConnection(ComponentName className,IBinder service) { m_connected = true; } public void onServicedisconnected(ComponentName className) { } }; public static class TestServiceBinder extends Binder { } public IBinder onBind(Intent intent) { return new TestServiceBinder(); } public void onDestroy() { super.onDestroy(); } public int onStartCommand(Intent intent,int flags,int startId) { return 1; } }
如果我在同一过程中没有服务或服务运行测试应用程序,屏幕兼容性开关将不会导致任何问题.但是,我不明白为什么服务会在屏幕兼容性切换期间导致系统异常.这是因为服务流程是非UI流程吗?哪个可能会触发Android核心代码中的错误?
解决方法
android:process
If the name assigned to this attribute begins with a colon (‘:’),a
new process,private to the application,is created when it’s needed
and the service runs in that process. If the process name begins with
a lowercase character,the service will run in a global process of
that name,provided that it has permission to do so. This allows
components in different applications to share a process,reducing
resource usage.
因此,如果您指定以小写字母开头的进程名称,则应具有执行此操作的权限.但我不知道检查这些权限的位置.也许它们在WindowManagerImpl中被检查,它找不到这个全局进程,因此返回null.这只是一个假设.
android – ContextWrapper.getResources()中的NullPointerException
07-05 21:13:30.063 7647-7647/root.fazerumsom E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: root.fazerumsom,PID: 7647 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{root.fazerumsom/root.fazerumsom.MainActivity}: java.lang.NullPointerException at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2110) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.content.Contextwrapper.getResources(Contextwrapper.java:89) at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78) at root.fazerumsom.MainActivity.<init>(MainActivity.java:31) at java.lang.class.newInstanceImpl(Native Method) at java.lang.class.newInstance(Class.java:1208) at android.app.Instrumentation.newActivity(Instrumentation.java:1061) at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2101) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)
解决方法
private String mStr = getResources().getString(...);
(或使用drawables或其他类型的资源).
这是无效的,因为尚未设置Context.在onCreate()方法中移动此赋值.
今天关于FragmentManager中的NullPointerException和formation null的分享就到这里,希望大家有所收获,若想了解更多关于Android FragmentManager BackStackRecord.run引发NullPointerException、android FragmentManager replace 报 java.lang.IllegalArgumentException: No view found for id、Android OS 3.2上的WindowManagerImpl中的NullPointerException、android – ContextWrapper.getResources()中的NullPointerException等相关知识,可以在本站进行查询。
本文标签: