2

我正在从事具有用户名和密码的活动。我在else部分使用了AlertDialog.Builder来显示“密码或用户名错误”的消息。我没有将它与任何数据库连接,只是为了测试目的,使用密码和用户名的字符串来比较 editText 字段的值,在if条件下,如果匹配,它会将用户带到一个新的屏幕名称"NewMenu"。我的问题是,当登录活动开始(应用程序运行)时,它首先显示消息,即其他部分,我想在单击提交按钮并且密码或用户名错误后显示此消息. 这是代码

public class Login extends Activity{


    private String pass=new String();
    private String nam=new String();
    private Button log;
    private View textreg;
    private EditText text1;
    private EditText text2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        textreg=(TextView) findViewById(R.id.textRegister);
        log=(Button) findViewById(R.id.btnsubmit);
        text1=(EditText) findViewById(R.id.txtuname);
        text2=(EditText) findViewById(R.id.txtpassword);



              //IF NOT REGISTERED USERS//
////A textview when clicked takes user to registeration page/////

        textreg.setOnClickListener(new OnClickListener() {

            @Override
                    public void onClick(View view) {
                startActivity(new Intent("com.DRMS.Register"));
                    }
                });


         //                                                        //
        // IF PASSWORD AND USERNAME CORRECT, GOTO NewMenu Activity //
       //                                                        //

        pass="12345";
        nam="12345";

        if(text1.getText().toString().equals(nam) && text2.getText().toString().equals(pass) ){


            log.setOnClickListener(new OnClickListener() {

                @Override

                        public void onClick(View view) {
                    startActivity(new Intent("com.DRMS.NewMenu"));
                        }
                    });

        }

            else{
            AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);

            dlgAlert.setMessage("wrong password or username");
            dlgAlert.setTitle("Error Message...");
            dlgAlert.setPositiveButton("OK", null);
            dlgAlert.setCancelable(true);
            dlgAlert.create().show();

            dlgAlert.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
            }
    }
}
4

5 回答 5

4

你的算法不行。onCreate() 在创建 Activity 时调用,因此它会在每次创建时检查用户名和密码。由于您从未设置文本字段,因此它们的值在第一次启动时永远不会确定,因此您总是在第一次启动时显示错误对话框。你应该做这样的事情:

protected void onCreate(Bundle savedInstanceState) {

    // 1. Call super() and init fields

    String pass="12345";
    String nam="12345";

    // 2. Set the onClickListener
    textreg.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            startActivity(new Intent("com.DRMS.Register"));
        }
    });

    // 3. Set the onClickListener for the Login button
    log.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            // 4. Check if fields are null
            if(text1.getText() != null && text2.getText() != null) {

                // 4.a check if username and password are OK
                if(text1.getText().toString().equals(nam) && 
                    text2.getText().toString().equals(pass) )
                {    
                    // Not null and OK, launch the activity            
                    startActivity(new Intent("com.DRMS.NewMenu"));
                } else {
                    // Username or password false, display and an error
                    AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);

                    dlgAlert.setMessage("wrong password or username");
                    dlgAlert.setTitle("Error Message...");
                    dlgAlert.setPositiveButton("OK", null);
                    dlgAlert.setCancelable(true);
                    dlgAlert.create().show();

                    dlgAlert.setPositiveButton("Ok",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {

                        }
                    });
                }
            } else {
                // The fields are not filled.
                // Display an error message like "Please enter username/password
            }
        }
    });
}
于 2013-07-31T12:13:37.437 回答
1

您应该在单击事件中编写此警报视图代码。

log.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view)
    {
        if(text1.getText().toString().equals(nam) && text2.getText().toString().equals(pass) )
        {
            AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);

            dlgAlert.setMessage("wrong password or username");
            dlgAlert.setTitle("Error Message...");
            dlgAlert.setPositiveButton("OK", null);
            dlgAlert.setCancelable(true);
            dlgAlert.create().show();

            dlgAlert.setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                }
            });
        }
        else
        {
            startActivity(new Intent("com.DRMS.NewMenu"));
        }
    }
});

}

您不需要在 oncreate 方法中检查用户名 n 传递。

希望能帮助到你!!

于 2013-07-31T12:01:57.493 回答
0

您的警报对话框代码将在单击注册按钮时进入

于 2013-07-31T12:04:50.433 回答
0
public class Second extends Activity {

    private String pass = new String();
    private String nam = new String();
    private Button log;
    private View textreg;
    private EditText text1;
    private EditText text2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        textreg = (TextView) findViewById(R.id.textRegister);
        log = (Button) findViewById(R.id.btnsubmit);
        text1 = (EditText) findViewById(R.id.txtuname);
        text2 = (EditText) findViewById(R.id.txtpassword);

        // IF NOT REGISTERED USERS//
        // //A textview when clicked takes user to registeration page/////

        textreg.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                startActivity(new Intent("com.DRMS.Register"));
            }
        });

        // //
        // IF PASSWORD AND USERNAME CORRECT, GOTO NewMenu Activity //
        // //

        pass = "12345";
        nam = "12345";

        log.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                if (text1.getText().toString().equals(nam)
                        && text2.getText().toString().equals(pass)) {
                    startActivity(new Intent("com.DRMS.NewMenu"));
                } else {
                    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(
                            getApplicationContext());

                    dlgAlert.setMessage("wrong password or username");
                    dlgAlert.setTitle("Error Message...");
                    dlgAlert.setPositiveButton("OK", null);
                    dlgAlert.setCancelable(true);
                    dlgAlert.create().show();

                    dlgAlert.setPositiveButton("Ok",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {

                                }
                            });
                }
            }
        });

    }

}
于 2013-07-31T12:03:09.147 回答
0

您应该在 onClick 方法中包含 if/else 条件。这将确保它仅在单击按钮后执行。

于 2013-07-31T12:03:33.367 回答