如何避免由于点击按钮导致Android应用程序崩溃?

时间:2017-08-30 10:47:12

标签: java android

我正在开发非常简单的注册应用程序。我也试图验证密码(即长度小于8)..但在运行应用程序后,“我很遗憾,你的应用已经停止工作”。请帮帮我。我使用seterror方法来显示错误

java文件:     包com.example.dell.practice;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
public void onbuttonclick(View v)
{
    EditText et=(EditText) findViewById(R.id.atpassword);

    if(et.getText().toString().trim().length()<8)
        et.setError("invalid password");
    else if(v.getId()==R.id.bsignup)
    {
        Intent i=new Intent(MainActivity.this,aftersignup.class);
        startActivity(i);
    }
}
}

和xml代码是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="344dp"
    android:layout_height="495dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical"
    tools:layout_editor_absoluteY="8dp"
    tools:layout_editor_absoluteX="8dp">



    <TextView
        android:id="@+id/tvusername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Username"
        android:textSize="16sp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" />

    <EditText
        android:id="@+id/etname"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"/>
    <TextView
        android:id="@+id/tvpassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="password"
        android:textSize="16sp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" />

    <EditText
        android:id="@+id/etpassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/blogin"
        android:layout_width="75dp"
        android:layout_height="65dp"
        android:layout_gravity="center"
        android:textStyle="bold"
        android:text="LOGIN" />

    <Button
        android:id="@+id/bsignup"
        android:layout_width="100dp"
        android:layout_height="65dp"
        android:layout_gravity="center"
        android:onClick="onbuttonclick"
        android:textStyle="bold"
        android:text="SIGN UP" />
</LinearLayout>

</android.support.constraint.ConstraintLayout>

4 个答案:

答案 0 :(得分:1)

当你在xml中使用etpassword时,你需要在java文件中引用相同的名称。
更改以下行

EditText et=(EditText) findViewById(R.id.atpassword);

EditText et=(EditText) findViewById(R.id.etpassword);


这应该可以解决您的应用崩溃错误。

答案 1 :(得分:0)

只需删除if else条件并将其替换为else条件

 if(et.getText().toString().trim().length()<8){
    et.setError("invalid password");
}
else 
{
    Intent i=new Intent(MainActivity.this,aftersignup.class);
    startActivity(i);
}

还在onCreate中初始化您的edittext并为其创建一个类级别变量

虽然您可能需要研究如何将有效代码编写为初学者:)

答案 2 :(得分:0)

            import android.content.Intent;
            import android.support.v7.app.AppCompatActivity 
            import android.os.Bundle;
            import android.view.View;
            import android.widget.EditText;

            public class MainActivity extends AppCompatActivity  implements View.OnClickListener;{

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


                EditText et=(EditText) findViewById(R.id.etpassword);
                Button btn=(Button)findViewById(R.id.blogin);
                Button btn_signup=(Button)findViewById(R.id.bsignup)
                btn_signup.setOnClickListener(this);
                btn.setOnClickListener(this);

            }
             @Override
                public void onClick(View v) {
                    switch(v.getId()){
                         case R.id.blogin:
                            if(et.getText().toString().trim().length()<8){
                    et.setError("invalid password");
                }else{
        //do Login procedure
        }


             break;
            case R.id.bsignup:
             Intent i=new Intent(MainActivity.this,aftersignup.class);
                    startActivity(i);
            break;
         }
      }

}

答案 3 :(得分:0)

这样做

    btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       if(et.getText().toString().trim().length()<8){
                        et.setError("invalid password");
                       }else{}
                   }
   });