- java.lang.NullPointerException - setText on null object reference
这就是我想要做几个小时的事情:
我有一个MainActivity.java文件(在下面列出)和一个带有开始按钮的fragment_start.xml文件。 点击开始按钮应显示带有points- / round-和countdown-Textviews的activity_main.xml文件。 它不起作用,这就是发生的事情:
logcat告诉我:
PID:1240 java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.TextView.setText(java.lang.CharSequence)'
模拟器显示:不幸的是,GAME已停止。
有必要提一下我在编程方面比较新吗?
谢谢你的建议!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MainActivity extends Activity implements View.OnClickListener { private int points; private int round; private int countdown; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showStartFragment(); } private void newGame () { points=0; round=1; initRound(); } private void initRound() { countdown = 10; update(); } private void update () { fillTextView(R.id.points, Integer.toString(points)); fillTextView(R.id.round, Integer.toString(round)); fillTextView(R.id.countdown, Integer.toString(countdown * 1000)); } private void fillTextView (int id, String text) { TextView tv = (TextView) findViewById(id); tv.setText(text); } private void showStartFragment() { ViewGroup container = (ViewGroup) findViewById(R.id.container); container.removeAllViews(); container.addView( getLayoutInflater().inflate(R.layout.fragment_start, null) ); container.findViewById(R.id.start).setOnClickListener(this); } @Override public void onClick(View view) { if(view.getId() == R.id.start) { startGame(); } } public void startGame() { newGame(); } } |
问题是
我猜这个问题出在
这就是你的问题:
1 2 3 4 | private void fillTextView (int id, String text) { TextView tv = (TextView) findViewById(id); tv.setText(text); // tv is null } |
- >(TextView)findViewById(id); //返回null
但是从你的代码中,我找不到为什么这个方法返回null。试着追查,
你给出的id作为参数,以及是否存在具有指定id的视图。
错误信息非常清晰,甚至可以告诉您什么方法。
从文档:
1 2 3 4 5 6 | public final View findViewById (int id) Look for a child view with the given id. If this view has the given id, return this view. Parameters id The id to search for. Returns The view that has the given id in the hierarchy or null |
http://developer.android.com/reference/android/view/View.html#findViewById%28int%29
换句话说:您没有使用您作为参数提供的ID的视图。
1 2 3 4 | private void fillTextView (int id, String text) { TextView tv = (TextView) findViewById(id); tv.setText(text); } |
如果这是您获得空指针异常的位置,则没有找到您传入
关于空指针的更多阅读:什么是NullPointerException,我该如何解决?