有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java活动实例不存在空对象引用

我正在尝试开发一个Android应用程序。对于我的用例,我想使用一种自定义字体,我编写了一个收集视图中所有可用TextViews的脚本,以便通过循环轻松设置字体。我想我应该把文本操作的东西源代码输出到一个名为TextManager.class的类中。但现在,当我执行应用程序时,我得到了一个错误:

java.lang.NullPointerException: Attempt to invoke virtual method '安卓.content.res.Resources 安卓.content.Context.getResources()' on a null object reference

它发生在我试图在TextMangaer中设置字体时。班我做了一些研究,发现这是因为此时不存在活动实例。但我不明白为什么,因为当我开始尝试这样做的时候。课堂上没有问题

//Start.class
public class Start extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // set fullscreen

    //Initialize shared preferences
    prefs = getSharedPreferences("User", Context.MODE_PRIVATE);
    editor=prefs.edit();

    setContentView(R.layout.start_screen);
    TextManager textManager= new TextManager();

    textManager.setTypeface(getTextViews((ViewGroup) findViewById(R.id.root_menu)));

}
}

还有我的文本管理器。类别:

public class TextManager extends Start{

public TextManager(){
super();
}

public void setTypeface(List<Integer> idsOfTextViews){
    Typeface typeFaceIkarosLight= Typeface.createFromAsset(getAssets(), "font/ikaros_light.otf");
    for(int i=0; i < idsOfTextViews.size();i++){
        ((TextView)findViewById(idsOfTextViews.get(i))).setTypeface(typeFaceIkarosLight);
    }

}
}

那么我该如何解决这个问题,或者我该如何写这个?如果有人能帮我弄清楚那就太好了。提前谢谢


共 (3) 个答案

  1. # 2 楼答案

    最好使用返回字体的方法,而不是将textview ID作为参数传递。你可以这样做:

    public Typeface getTypeFace(Context context){
        Typeface typeFaceIkarosLight = Typeface.createFromAsset(context.getAssets(), "font/ikaros_light.otf");
        return typeFaceIkarosLight;
    }
    
  2. # 3 楼答案

    问题是获取资产的上下文为空

    如果在活动中使用getContext()getApplicationContext(),但如果在片段中使用,则使用getActivity().getContext()

    Typeface font = Typeface.createFromAsset(getContext().getAssets(),  "font/ikaros_light.otf");
    

    而不是

    Typeface typeFaceIkarosLight= Typeface.createFromAsset(getAssets(), "font/ikaros_light.otf");