2 u011371270 u011371270 于 2016.04.27 21:28 提问

android小白问一个故障

android小白,做一个很简单的动作,第一个activity里面输入的内容传递到第二个activity的textview中去,但是报错如下
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

第一个activity

public class MainActivity extends AppCompatActivity {
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
    }
 public void sendMessage3(View view){
Intent intent=new Intent(this,DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
  intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
            }

     public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";


}

第二个activity

  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);


        TextView tv = (TextView) findViewById(R.id.textView);
        tv.setText(message);

        // Set the text view as the activity layout
        setContentView(R.layout.activity_display_message);


    }

如果我把 tv.setText(message);这句话注销掉,不赋值,第二个页面就能正常打开。

android刚上手小白。。自己研究了半天没研究出什么原因,求大神解答,非常感谢

15个回答

glydxm
glydxm   2016.04.27 23:16
已采纳

setContentView(R.layout.activity_display_message);放在第三行,其他下移

w172087242
w172087242   Ds   Rxr 2016.04.27 21:55

textView没找到吧,你可以打印下tv这个值,看是不是null

crazy1235
crazy1235   Ds   Rxr 2016.04.27 22:05

setContentView应该放到你实例化组件之前。
你应该这样写:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

  // Set the text view as the activity layout
        setContentView(R.layout.activity_display_message);

        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);


        TextView tv = (TextView) findViewById(R.id.textView);
        tv.setText(message);
    }

qq_21413973
qq_21413973 你的是对的,问题就是没有提前初始化布局,造成空指针异常
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.27 21:32

第一次写android博客,现在还是一个小白
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

danielinbiti
danielinbiti   Ds   Rxr 2016.04.27 21:59
 TextView tv = (TextView) findViewById(R.id.textView);
        tv.setText(message);

        // Set the text view as the activity layout
        setContentView(R.layout.activity_display_message);

顺序换一下,反了,现有布局,再找组件

        // Set the text view as the activity layout
        setContentView(R.layout.activity_display_message);
TextView tv = (TextView) findViewById(R.id.textView);
        tv.setText(message);

suwu150
suwu150   2016.04.27 23:44

你应该这样写:
// Set the text view as the activity layout
setContentView(R.layout.activity_display_message);//先找到activity布局,然后在查找其中的组件

    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    TextView tv = (TextView) findViewById(R.id.textView);
    tv.setText(message);

按我上面的写法是合适的

suwu150
suwu150   2016.04.28 12:35

弄好了没?应该好了吧

donggua3694857
donggua3694857   Rxr 2016.04.28 13:47

空指针异常,因为没能找到你的控件。所以不能用它进行赋值操作。setContentView这句话应该提前,先找到布局才能操作控件

sinat_21406675
sinat_21406675   2016.04.28 15:06

为什么要每点击一次按钮都要去初始化EditText控件,为什么不在onCreate方法中初始化呢?!

u010844304
u010844304   2016.04.28 19:55

setContetnView()应该在前面

共15条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!