GVKun编程网logo

FragmentManager中的NullPointerException(formation null)

26

对于FragmentManager中的NullPointerException感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍formationnull,并为您提供关于AndroidFragme

对于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)

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

答案1

小编典典

好的,在将我的头撞到砖墙上一段时间后,我发现这与我的片段的声明直接相关setRetainInstance(true)。删除此问题后,问题就消失了。这似乎是兼容性库错误…

我将在适当的Google项目下提出一些建议。祝您好运,如果您正在慢慢读这篇文章,请对自己说!我希望这将使您能够解决此问题。

Android FragmentManager BackStackRecord.run引发NullPointerException

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)or
add(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

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

Android OS 3.2上的WindowManagerImpl中的NullPointerException

当我在“拉伸到填充屏幕”到“缩放到填充屏幕”之间切换时,我在Wizerd创建的一个简单的 Android项目上获得了一个空指针异常,该项目由一个分开的过程中的服务创建.如果将服务放入与主活动相同的进程中,即未指定“android:process”属性,则不会发生此崩溃.虽然只有当我将“android:process”添加到我的测试服务的清单文件时才会发生.

例外是:

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

android – ContextWrapper.getResources()中的NullPointerException

我真的不知道我正在构建的 Android应用程序发生了什么.在它开发的某个时刻,我开始在模拟器中启动它,并显示消息“Foo stopped”.这是错误日志,如果有人可以帮助我:
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)

解决方法

您正在从字段初始值设定项中调用getResources().就像是
private String mStr = getResources().getString(...);

(或使用drawables或其他类型的资源).

这是无效的,因为尚未设置Context.在onCreate()方法中移动此赋值.

今天关于FragmentManager中的NullPointerExceptionformation 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等相关知识,可以在本站进行查询。

本文标签: