为什么我的代码崩溃

问题描述:

所以我正在运行一个教程应用程序,除了当我尝试运行bellow类时,它都可以工作,但是我没有在代码中看到错误,所以我想知道是否有人可以帮忙可能代码有问题。为什么我的代码崩溃

另外在一边不编程时,例如你键入说:android:在xml或其他东西。在Java中,我怎么没有得到下拉菜单中的所有选项后可以去?

代码:

package com.example.learn.tam; 

import java.util.Random; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.text.InputType; 
import android.view.Gravity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.ToggleButton; 

public class textplay extends Activity implements View.OnClickListener{ 

Button chkCommand; 
ToggleButton passToggle; 
EditText input; 
TextView display; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.text); 

    holder(); 

    passToggle.setOnClickListener(this); 

    chkCommand.setOnClickListener(this); 
} 

private void holder() { 

    Button chkCommand = (Button) findViewById(R.id.bResults); 
    passToggle = (ToggleButton) findViewById(R.id.tbPassword); 
    input = (EditText) findViewById(R.id.etCommands); 
    display = (TextView) findViewById(R.id.tvResults); 

} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 
    case R.id.bResults: 

     String check = input.getText().toString(); 

     display.setText(check); 

     if(check.contentEquals("left")){ 
      display.setGravity(Gravity.LEFT); 
     } 
     else if(check.contentEquals("center")) { 
      display.setGravity(Gravity.CENTER); 
     } 
     else if(check.contentEquals("right")){ 
      display.setGravity(Gravity.RIGHT); 
     } 
     else if(check.contentEquals("blue")){ 
      display.setTextColor(Color.BLUE); 
     } 
     else if(check.contentEquals("WTF")){ 
      Random crazy = new Random(); 
      display.setText("WTF!!!!"); 
      display.setTextSize(crazy.nextInt(75)); 
      display.setTextColor(Color.rgb(crazy.nextInt(265),crazy.nextInt(265),crazy.nextInt(265))); 

      switch(crazy.nextInt(3)){ 
      case 0: 
       display.setGravity(Gravity.LEFT); 
       break; 
      case 1: 
       display.setGravity(Gravity.CENTER); 
       break; 
      case 2: 
       display.setGravity(Gravity.RIGHT); 
       break; 
      } 
     } 
     else{ 
      display.setText("Invalid"); 
      display.setGravity(Gravity.CENTER); 
      display.setTextColor(Color.WHITE); 
     } 


     break; 
     case R.id.tbPassword: 

     if (passToggle.isChecked() == true){ 
      input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
     }else{ 
      input.setInputType(InputType.TYPE_CLASS_TEXT); 
     } 
     break; 
    } 
} 
} 
+1

请发布一个崩溃日志。 – MByD 2013-03-02 15:53:16

+0

注意:'if(passToggle.isChecked()){'等同于if(passToggle.isChecked()== true){'并且需要更少的输入。 – Sam 2013-03-02 15:57:45

变化:

private void holder() { 

    Button chkCommand = (Button) findViewById(R.id.bResults); 
    passToggle = (ToggleButton) findViewById(R.id.tbPassword); 
    input = (EditText) findViewById(R.id.etCommands); 
    display = (TextView) findViewById(R.id.tvResults); 

} 

private void holder() { 

    chkCommand = (Button) findViewById(R.id.bResults); 
    passToggle = (ToggleButton) findViewById(R.id.tbPassword); 
    input = (EditText) findViewById(R.id.etCommands); 
    display = (TextView) findViewById(R.id.tvResults); 

} 

通过声明具有相同名称的新变量,你隐藏类字段。由于这一点,班级chkCommand保持为空,并且在您尝试使用chkCommand.setOnClickListener(this);时给了您一个例外。

+0

谢谢,我在发布之前阅读了4次代码,仍然设法错过了这个愚蠢的错误。 – TAM 2013-03-02 15:56:54

+1

我建议TAM upvote并接受答案。 – duffymo 2013-03-02 16:12:24

+0

我们可以请尽量准确吗?类字段不是全局的。 – Simon 2013-03-02 16:18:41