2015-10-30 8 views
-2

Мое приложение падает, как только я нажимаю кнопку «Lets's Play». Я только начал развиваться .. и его даже текст, который делает ошибку, я пытался только сделать tv1.setText («test»); и он тоже разбился.Приложение падает, когда я нажимаю кнопку

вот мой код:

package com.example.adam.casinoadam; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Main extends Activity { 

    ImageView iv1; 
    ImageView iv2; 
    ImageView iv3; 
    TextView tv1; 
    Button btn1; 
    int x,y,z; 
    int coins=15; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     iv1 = (ImageView) findViewById(R.id.iv1); 
     iv2 = (ImageView) findViewById(R.id.iv2); 
     iv3 = (ImageView) findViewById(R.id.iv3); 
     tv1 = (TextView) findViewById(R.id.tv1); 
     btn1 = (Button) findViewById(R.id.btn1); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 



    public void Start(View view) { 
     if(coins==0) { 
      Toast.makeText(this, "Sorry. Good Bye!", Toast.LENGTH_LONG).show(); 
      finish(); 
     } 

     coins=coins-1; 
     tv1.setText("Money: "+coins+" Coins"); 


     x=1+(int)((5-1+1)*Math.random()); 
     y=1+(int)((5-1+1)*Math.random()); 
     z=1+(int)((5-1+1)*Math.random()); 


     if(x==1)iv1.setImageResource(R.drawable.cherry); 
     if(x==2)iv1.setImageResource(R.drawable.tiltan); 
     if(x==3)iv1.setImageResource(R.drawable.bell); 


     if(y==1)iv2.setImageResource(R.drawable.cherry); 
     if(y==1)iv2.setImageResource(R.drawable.tiltan); 
     if(y==1)iv2.setImageResource(R.drawable.bell); 


     if(z==1)iv3.setImageResource(R.drawable.cherry); 
     if(z==1)iv3.setImageResource(R.drawable.tiltan); 
     if(z==1)iv3.setImageResource(R.drawable.bell); 


     if(x==y && y==z && z==x){ 
      Toast.makeText(this,"You won !",Toast.LENGTH_LONG).show(); 
      coins=coins+10; 
} 
} 
} 
+4

Попробуйте переместить все findViewById после setContentView (OnCreate метод) – kzz

ответ

0

Заменить OnCreate с ниже код:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv1 = (ImageView) findViewById(R.id.iv1); 
    iv2 = (ImageView) findViewById(R.id.iv2); 
    iv3 = (ImageView) findViewById(R.id.iv3); 
    tv1 = (TextView) findViewById(R.id.tv1); 
    btn1 = (Button) findViewById(R.id.btn1);1 
} 

findViewById() возвращает вид, если он существует в макете вы предоставили в setContentView(), в противном случае возвращает null, и это то, что происходит с вами.

Если вы setContentView(R.layout.activity_main); , а затем вызвать findViewById(R.id.iv1); он возвращает вид, который это макет, но если вы звоните findViewById(R.id.iv1);, прежде чем setContentView(R.layout.activity_main); он будет возвращать null так нет вида прилагается к вашей деятельности.

0

Вы не можете инициализировать объекты вида перед setContentView, вызванным методом onCreate. Если вы инициализируете объекты вида, он получит нулевые значения, потому что активность не получает его файл макета.

iv1 = (ImageView) findViewById(R.id.iv1); 
iv2 = (ImageView) findViewById(R.id.iv2); 
iv3 = (ImageView) findViewById(R.id.iv3); 
tv1 = (TextView) findViewById(R.id.tv1); 
btn1 = (Button) findViewById(R.id.btn1); 

Эти 5 строк должны быть после этих двух линий в OnCreate метод:

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Таким образом, ваш код должен быть:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv1 = (ImageView) findViewById(R.id.iv1); 
    iv2 = (ImageView) findViewById(R.id.iv2); 
    iv3 = (ImageView) findViewById(R.id.iv3); 
    tv1 = (TextView) findViewById(R.id.tv1); 
    btn1 = (Button) findViewById(R.id.btn1); 
} 
0

Измените код следующим образом:

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

     iv1 = (ImageView) findViewById(R.id.iv1); 
     iv2 = (ImageView) findViewById(R.id.iv2); 
     iv3 = (ImageView) findViewById(R.id.iv3); 
     tv1 = (TextView) findViewById(R.id.tv1); 
     btn1 = (Button) findViewById(R.id.btn1); 
    } 

findViewById должен быть после setContentView

0

Вы должны определить точку после setContentView(R.layout.activity_main);

2

Заменить код с помощью этого onCreate() Сначала вы должны setContentView(R.layout.activity_main) Befor Отдавая свой Button и все.

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Итак, наконец, ваш код выглядит следующим образом.

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

    iv1 = (ImageView) findViewById(R.id.iv1); 
    iv2 = (ImageView) findViewById(R.id.iv2); 
    iv3 = (ImageView) findViewById(R.id.iv3); 
    tv1 = (TextView) findViewById(R.id.tv1); 
    btn1 = (Button) findViewById(R.id.btn1); 
} 
0

Вы должны попытаться сделать это, потому что до тех пор, пока расположение определяется contentview вы не можете использовать функцию() в программе

@Override 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv1 = (ImageView) findViewById(R.id.iv1); 
    iv2 = (ImageView) findViewById(R.id.iv2); 
    iv3 = (ImageView) findViewById(R.id.iv3); 
    tv1 = (TextView) findViewById(R.id.tv1); 
    btn1 = (Button) findViewById(R.id.btn1); 

}