2016-06-15 2 views
-6

я не получаю никаких ошибок, но когда я запускаю приложение он выходит из строя:App происходит сбой, когда я запускаю его

public class MainActivity extends AppCompatActivity { 
    ImageButton Nr1 = (ImageButton) findViewById(R.id.ImageButton1); 
    public void machwas(View v) { 
     Nr1.setImageResource(R.drawable.x); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 
+0

если приложение сбоя вы получаете наверняка сообщение об ошибке, посмотри в LogCat .... –

ответ

0

Это здесь не так:

public class MainActivity extends AppCompatActivity { 
    ImageButton Nr1 = (ImageButton)findViewById(R.id.ImageButton1); 

потому что findViewById() следует назвать ВНУТРИ методом onCreate, причина в том, что после этого являются макеты завышенные, и вы готовы чтобы получить представления и инициализировать виджеты ...

так что вы делаете неправильно, ImageButton ошибочно, вероятно, будет null после этой строки, а затем это здесь

public void machwas(View v){ 
     Nr1.setImageResource(R.drawable.x); 
    } 

взорвется с NullPointer Exception ...

, но это только потому, что вывод вы не вывесить LogCat ...

Для получения дополнительной информации, пожалуйста, посмотрите к Жизненный Цикл активности и Official Android Documentation

enter image description here

1

Вы должны вызвать findViewById после зрения создания.

public class MainActivity extends AppCompatActivity { 

ImageButton Nr1 ; 


public void machwas(View v){ 
    Nr1.setImageResource(R.drawable.x); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Nr1 = (ImageButton)findViewById(R.id.ImageButton1); 
    machwas(0); 
} 
} 
+0

findViewById необходимо вызывать после того, как в этой активности задано представление. Исправь это. –

1

findViewById() ищет вид, устанавливаемое setContentView(). В вашем коде findViewById() вызывается до onCreate(), так что пока нет представления, и из-за этого все находки не сработают, и вы всегда получите null.

КСТАТИ: рассмотреть вопрос об использовании помощников, как нож для масла