2015-06-14 60 views
1

我只是遵循Android網站上的基本教程。但是,我試圖改變一些東西只是爲了好玩。例如,我不是在DisplayMessageActivty類的方法onCreate(...)內創建運行時TextView(如本教程中所示),而是在XML佈局文件中定義了一個靜態TextView,因爲我還想顯示其他東西(例如,a靜態消息以及從主屏幕輸入的消息)。所以,DisplayMessageActivty相應的XML文件中,我定義了TextView和其他的東西爲:更改TextView的文本會拋出NullPointer異常

[...] 

<TextView android:id="@+id/dynamic_msg" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="ciao" 
    android:textSize="40dp" 
    android:layout_below="@id/static_msg" 
    android:layout_alignParentLeft="true" 
    android:layout_toLeftOf="@+id/times" /> 

[...] 

然後,我訪問該TextView以下面的方式(在DisplayMessageActivty類的onCreate(...)法):

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Get the message from the intent 
    Intent intent = getIntent(); 
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 

    // HERE I WANT TO CHANGE THE CONTENT OF THE TEXTVIEW 
    TextView dynamicText = (TextView) findViewById(R.id.dynamic_msg); 
    dynamicText.setText(message); 

    setContentView(R.layout.activity_display_message); 

    // Up button 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
} 

不幸的是,當我按在主要活動我的代碼拋出以下異常Send按鈕:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

我在互聯網上搜索和其他教程中採用的方法看起來很相似,所以我不明白我做錯了什麼。謝謝!

+1

'setContentView'在'findViewById'前面,否則你沒有小部件可以找到 – Blackbelt

+0

Argh !!!我不知道...非常感謝你。如果你把你的評論寫成答案,我可以投票;) –

回答

2

內容沒有設置到視圖中,如果你這樣做,findviewByid將返回NULL setContentView

移動 setContentView之前findviewByid它會工作。