2013-07-21 68 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中使用模拟器 –