2013-07-21 3 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 Application (процесс 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. –