Java getBaseContext()上的NullPointerException

Java getBaseContext()上的NullPointerException,java,android,nullpointerexception,android-context,Java,Android,Nullpointerexception,Android Context,我有一个MainActivity类,它有一个名为:updateTabTitles() updateTabTitles()执行听起来像的操作,更新我选项卡的标题 String tabName = tabNames[tabNumber]; String font = "helveticaneuebold.ttf"; // Fonts found in assets/fonts/ folder SpannableString title = new SpannableStri

我有一个
MainActivity
类,它有一个名为:
updateTabTitles()

updateTabTitles()
执行听起来像的操作,更新我选项卡的标题

    String tabName = tabNames[tabNumber];
    String font = "helveticaneuebold.ttf"; // Fonts found in assets/fonts/ folder

    SpannableString title = new SpannableString(tabName);
    SpannableString subTitle;

    // This line gives me trouble
    title.setSpan(new TypefaceSpan(getBaseContext(), font), 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
我从扩展
片段的
ChecklistTab
类调用此函数。以下方法在my
ChecklistTab
类中:

 public int calculateRemaining(ArrayList<ChecklistItem> checklistItems, int tabNumber) {
    int remaining = 0;

    for (int i = 0; i < checklistItems.size(); i++) {
        if (!checklistItems.get(i).getCheckBox().isChecked() && checklistItems.get(i).getCheckBox().isEnabled() && !checklistItems.get(i).getCheckBox().getText().equals("N/A")) {
            remaining++;
        }
    }

    // NULL POINTER HERE
    ((MainActivity) getActivity()).updateTabTitles(tabNumber, remaining);

    return remaining;
}
我真的不太了解上下文,但这段代码用于我的旧实现。然而,自从重构以来,我现在似乎不知道出了什么问题

堆栈跟踪:

java.lang.NullPointerException
            at com.brettrosen.atls.fragments.ChecklistTab.calculateRemaining(ChecklistTab.java:179)
            at com.brettrosen.atls.onclicklisteners.CheckboxOnClickListener.onClick(CheckboxOnClickListener.java:46)
            at android.view.View.performClick(View.java:4192)
            at android.widget.CompoundButton.performClick(CompoundButton.java:100)
            at android.view.View$PerformClick.run(View.java:17327)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5019)
            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:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

你能试试
getApplicationContext
而不是
getBaseContext

title.setSpan(new TypefaceSpan(getApplicationContext(), font), 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
试用

title.setSpan(new TypefaceSpan(this, font), 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

stacktrace说,
PrearrivalPlan
是您的片段,因为它的
onCreateView()
正在被调用。但是您正在调用
ChecklistTab
中的
getActivity()
,它似乎是另一个片段,并且没有附加到任何活动
getActivity()
返回null,因此您看到的是不同的NPE


您可以将
上下文
作为参数传递给需要的方法,并在片段生命周期中的
onAttach()
onDetach()
生命周期事件之间的片段中使用
getActivity()

请发布Java堆栈跟踪。另外,你在哪里调用
calculateRemaining()
?为什么不使用“this”作为上下文而不是getBaseContext?@commonware我发布了我的stacktrace<代码>计算维护
是从许多不同的类调用的。其中一些是定制的OnClickListener类
TypefaceSpan.java:22
is???@nullpointer在上面的代码块中,我在行上方写了一条评论,说这就是错误所在感谢您的回复。我尝试过使用getApplicationContext(),this,MainActivity.this,都不起作用。谢谢回复。我试过使用getApplicationContext(),这个,MainActivity.this,没有一个有效。我想这正是问题所在,谢谢你指出了这一点。如何使用上下文作为参数来使用同一行
((MainActivity)getActivity()).updateTabTitles(tabNumber,剩余)我似乎无法调用
context.getActivity()
title.setSpan(new TypefaceSpan(this, font), 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);