我正在学习用 Java 开发应用程序。假设我的应用程序需要在屏幕上显示一个数字。为此,在屏幕上创建了一个对象,并在代码中将变量的值分配给它。起初,除了GameActivity.java(acrivity_game.xml我为其创建的代码)之外,我没有去任何地方,并且这些操作在那里完成如下:
TextView textObjectPartA;
TextView textObjectPartB;
TextView textObjectPartA = (TextView)findViewById(R.id.textPartA);
TextView textObjectPartB = (TextView)findViewById(R.id.textPartB);
int partA = randInt.nextInt(numberRange);
partA++;
int partB = randInt.nextInt(numberRange);
partB++;
textObjectPartA.setText(""+partA);
textObjectPartB.setText(""+partB);
启动应用程序并打开它时,调试器给出以下错误
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
我在这里观看了对问题的讨论,并按照答案中的说明进行了操作:
字符串.xml 文件
<string name="part_a">part a value = %1$d.</string>
<string name="part_b">part b value = %1$d.</string>
activity_game.xml 文件
<TextView
android:id="@+id/textPartB"
android:text="@string/part_b"
...
<TextView
android:id="@+id/textPartA"
android:text="@string/part_a"
游戏活动.java
Resources res = getResources();
String partA_text = String.format(res.getString(R.string.part_a), partA);
textObjectPartA.setText(partA_text);
String partB_text = String.format(res.getString(R.string.part_b), partB);
textObjectPartB.setText(partB_text);
我也尝试了一个简单的解决方案 - 只需写
textObjectPartA.setText(String.valueOf(partA));
textObjectPartB.setText(String.valueOf(partB));
这个错误不会消失。尝试加载此 Activity 时程序也会崩溃。我究竟做错了什么?
熟悉了TS萝卜之后,问题就清楚了。试试这个为小部件赋值的例子:
您在一个类中声明了一个全局小部件,但为本地小部件分配了一个值。也就是说,您的程序不了解这些小部件是什么:
在 onCreate() 中删除 TextView 一词:
并像您在此处所做的那样为小部件分配值:
然后您可以在课堂上的任何地方使用全局小部件。而且很可能错误会消失:)