哪个引用变量为null - 尝试从字段中读取' android.os.Handler android.support.v4.a.m.a'在null对象引用上

时间:2016-03-02 13:58:21

标签: java android

我有一个堆栈跟踪,不清楚哪个引用变量为空。

尝试从字段中读取' android.os.Handler android.support.v4.a.m.a'在空对象引用上

if (Looper.myLooper() != mActivity.mHandler.getLooper()) {

(我的观点是mActivity为空)

  1. 动态是否为空?
  2. mHandler是否为空?
  3. 更完整的堆栈跟踪 - 但不是问题的一部分..................

    D/AndroidRuntime( 8354): Shutting down VM
    E/AndroidRuntime( 8354): FATAL EXCEPTION: main
    E/AndroidRuntime( 8354): Process: za.co.nedsecure.nedbankROA.ete, PID: 8354
    E/AndroidRuntime( 8354): java.lang.NullPointerException: Attempt to read from field 'android.os.Handler android.support.v4.a.m.a' on a null object reference
    E/AndroidRuntime( 8354):at android.support.v4.a.s.f(FragmentManager.java:1476)
    E/AndroidRuntime( 8354):at android.support.v4.a.s.b(FragmentManager.java:490)
    E/AndroidRuntime( 8354):at xyz.......MainActivity.a(MainActivity.java:299)
    

    MainActivity代码为:

    if (mainActivityWeakReference.get() != null) {
                        mainActivityWeakReference.get().getSupportFragmentManager().executePendingTransactions();
                    }
    

    我的修复:(我希望就是这样)

    if (mainActivityWeakReference.get() != null && !mainActivityWeakReference.get().isFinishing()) {
                        mainActivityWeakReference.get().getSupportFragmentManager().executePendingTransactions();
                    }
    

2 个答案:

答案 0 :(得分:3)

您必须阅读更多的堆栈跟踪以获取更多线索,但实际上找到这些线索的最简单方法是将表达式放在多行中。

if (Looper
  .myLooper() 
  != 
  mActivity
  .mHandler
  .getLooper()) {

请记得在评估来源之前撤消这个。

答案 1 :(得分:3)

找到这个的一个好方法是在代码中的某处放置一个断点(在这一行上是正确的),然后评估表达式。

您可以在“运行”菜单中找到“评估表达式”,也可以根据您使用的是PC还是mac来使用不同的快捷方式。

然后输入表达式并点击Evaluate。当你找到一个返回null的时候,你就找到了问题。

因此,尝试运行所有可能的空值,您最终会找到它:

mActivity
mActivity.mHandler