[英]App crashes when i press the button
當我按下“讓我們開始玩”按鈕時,我的應用程序就會崩潰。 我剛開始開發..它甚至不是產生錯誤的文本,我只是嘗試做 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;
}
}
}
將您的 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
}
如果您在
setContentView()
提供的布局中存在,findViewById()
將返回一個 View ,否則返回null
,這就是發生在您身上的事情。如果你
setContentView(R.layout.activity_main);
然后調用findViewById(R.id.iv1);
它將返回一個視圖,這是您的布局,但是如果您調用findViewById(R.id.iv1);
在setContentView(R.layout.activity_main);
之前setContentView(R.layout.activity_main);
它將返回null
因為您的活動沒有附加視圖。
在 onCreate 方法中調用 setContentView 之前,您無法初始化視圖對象。 如果您初始化視圖對象,它將獲得空值,因為活動沒有獲得它的布局文件。
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);
}
像這樣修改你的代碼:
@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之后
您必須在setContentView(R.layout.activity_main);
之后定義視圖setContentView(R.layout.activity_main);
用這個onCreate()
替換你的代碼首先你必須setContentView(R.layout.activity_main)
才能投射你的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);
}
您必須嘗試這樣做,因為在contentview
定義布局之前,您不能在程序中使用 ( findviewbyid
) 函數
@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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.