2013-07-21 66 views
1

我是新來的Android編程和下面的程序是我的第一個Android應用
.java文件爲什麼我的Android應用程序意外停止?

public class MainActivity extends Activity 
{ 
    Button btn = (Button) findViewById(R.id.btn); 
    private OnClickListener btn_click = new OnClickListener() { 

     public void onClick(View v) { 
      btn.setText("Hi there!"); 

     } 
    }; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     btn.setOnClickListener(btn_click); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    }  
} 

.XML文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="My Button" /> 

</RelativeLayout> 

我想一旦我點擊按鈕My Button它的文本改變「你好!」。但是,當我的應用程序正在在模擬器中運行,它打破並彈出一條消息:
的應用testapp_1(過程com.example.testapp_1)意外

什麼是我的錯誤採空?以及我如何解決它們?

+0

'Button btn =(Button)findViewById(R.id.btn);'您還需要將其移入方法中。所有Java可執行代碼都必須存在於方法中。大概把它放在'onCreate'上,這取決於你想要的可見性。 – Simon

回答

4

setContentView之後移動您的初始化。

Button btn; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn = (Button) findViewById(R.id.btn); // initalize button after setContentView 
    btn.setOnClickListener(btn_click); 
} 

您需要先將內容設置爲活動,然後初始化您的視圖。您在onCreate之外初始化。您將獲得NullPointerException。您可以將當前視圖層次結構的findViewById設置爲該活動。

+0

工作就像一個魅力!真的很感謝 –

+1

@ABFORCE很高興它幫助。如果它有助於在網站允許時接受答案。請記住發生崩潰時發佈堆棧跟蹤。有用的信息會被記錄。 – Raghunandan

+0

這個「堆棧跟蹤」在哪裏?請注意,我在eclipse中使用模擬器 –