简单的Android程序会导致错误

时间:2016-09-05 21:34:13

标签: android android-activity

我开始在Android中编码,但我的第一个吐司程序导致错误:Has Stopped Working

我已提交了我的代码,希望您能提供帮助。

public class MainActivity extends AppCompatActivity {
EditText edit;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Button btn = (Button) findViewById(R.id.button1);
    final EditText edit = (EditText) findViewById(R.id.editText1);
    btn.setOnClickListener(myhandler1);
}

View.OnClickListener myhandler1 = new View.OnClickListener() {
    public void onClick(View v) {
        Toast.makeText(MainActivity.this,
                edit.getText().toString(), Toast.LENGTH_LONG).show();
    }
  }; 
}

6 个答案:

答案 0 :(得分:1)

在视图上分配onClickListener需要类的上下文(this / MainActivity.this / ....),如果您已经声明了视图,也不要使用final。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edit;
private Button btn;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  btn  = (Button) findViewById(R.id.button1);
  edit = (EditText) findViewById(R.id.editText1);
  btn.setOnClickListener(MainActivity.this);
}

@Override
public void onClick(View v) {
     // if view is your button
     if(v == btn){
     Toast.makeText(MainActivity.this,
            edit.getText().toString(), Toast.LENGTH_LONG).show();
     }
  }
}

答案 1 :(得分:0)

确保btn不为null,添加以下代码行:

if(btn != null){
    btn.setOnClickListener(myhandler1);
}

答案 2 :(得分:0)

是的,你得到NullPointerException。为什么?请看下面的代码块:

// your global variable
EditText edit;
// your local variable
final EditText edit = (EditText) findViewById(R.id.editText1);

2 edittext是2个不同的对象。因此,当您尝试使用之前未初始化的全局EditText时,>你有错误只需删除本地变量中的final EditText即可解决问题。

答案 3 :(得分:-1)

从代码中删除:

final Button
final EditText

答案 4 :(得分:-1)

由于您的全球参考,它无效。删除全局引用或者您可以这样做...

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText edit;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn  = (Button) findViewById(R.id.button1);
    edit = (EditText) findViewById(R.id.editText1);
    btn.setOnClickListener(this);
}

@Override
    public void onClick(View v) {
         Toast.makeText(MainActivity.this,
                edit.getText().toString(), Toast.LENGTH_LONG).show();
    }
}

答案 5 :(得分:-1)

final Button btn = (Button) findViewById(R.id.button1);
final EditText edit = (EditText) findViewById(R.id.editText1);

这些代码行导致了问题,因为您已经定义了变量btn和edit,因此无需再次定义它们。您可以使用以下内容替换上述行。

btn = (Button) findViewById(R.id.button1);
edit = (EditText) findViewById(R.id.editText1);

这应该可以解决您的问题。如果没有,请告诉我们。