0

私のログイン アクティビティでは、オプション メニューの [ログイン] と [ユーザーの変更] に 2 つのボタンを作成しました。ユーザーが [ユーザーの変更] をクリックすると、電話からデータが削除されます。ユーザーにこのアクションの確認を求めるダイアログ ボックスを表示します。

ユーザーが一度ログアウトし、ユーザー名とパスワードのテキストビューに資格情報を入力しないまで、問題なく動作しているようです。ユーザーがログイン ボタンをクリックしたときにこれらが空の場合、「有効な名前を入力してください」というトースト メッセージが表示されますが、ユーザーがユーザーを変更するかどうかを尋ねるダイアログ ボックスも表示されます。

私の質問は、このコードがオプションメニュー内のログインケースにないときに、ユーザーを変更することを確認するダイアログボックスが表示されるのはなぜですか? これは、ユーザーが空のフィールドでログインをクリックしてから変更ユーザー コードが実行されたときのようなものです。よろしくお願いします。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {

        Cursor allFromCompIdTable = nfcscannerapplication.loginValidate.queryAllFromCompanyIdTable();

        if(allFromCompIdTable.getCount() > 0){

            if(allFromCompIdTable.moveToLast()){

                compId = allFromCompIdTable.getString(allFromCompIdTable
                        .getColumnIndex(LoginValidate.C_COMPANY_ID_OUTSIDE_APP_PURPOSES));

            }

        } 

        if(isAllowChangeUser.equalsIgnoreCase("false")){
            if(item.getItemId() == R.id.changeuser)
            item.setVisible(false);
            }

       switch (item.getItemId()) {


        case R.id.login:




            Log.e(TAG, "login clicked from opts menu");



                theUsername = userName.getText().toString();

                if(theUsername.trim().equalsIgnoreCase("")){

                    Toast.makeText(
                            EntryActivity.this,
                            "Please enter a valid name.",
                            Toast.LENGTH_LONG).show();
                    onCreate(sIs);

                }else{

                thePassword = passwordPin.getText().toString();
                String loginType = "1";

                if(isSavePassword.trim().equalsIgnoreCase("false")){

                    if( ! thePassword.trim().equalsIgnoreCase("")){
                String[] params = new String[]{compId, theUsername, thePassword, loginType}; 

                //validate user Asynchonously on background thread
                AsyncValidateCarer avc = new AsyncValidateCarer();
                avc.execute(params);
                    }else{
                        Toast.makeText(
                                EntryActivity.this,
                                "Please enter a valid password.",
                                Toast.LENGTH_LONG).show();
                    }
                }else if(isSavePassword.trim().equalsIgnoreCase("true")){

                     Cursor c = nfcscannerapplication.loginValidate.queryAllFromCarer();
                     String firstNameFromDB = null; 
                     String passwordFromDB = null;
                     String carerIdFromDB = null;

                    if(c != null && c.getCount() > 0){

                    c.moveToLast();
                    firstNameFromDB = c.getString(c.getColumnIndex(LoginValidate.C_CARER_FIRSTNAME));
                    passwordFromDB = c.getString(c.getColumnIndex(LoginValidate.C_PASSWORD));
                    carerIdFromDB = c.getString(c.getColumnIndex(LoginValidate.C_CARER_ID));
                    carerID = carerIdFromDB;

                    }else{
                        String[] params = new String[]{compId, theUsername, thePassword, loginType}; 

                        //validate user Asynchonously on background thread
                        AsyncValidateCarer avc = new AsyncValidateCarer();
                        avc.execute(params);
                    }

                    if(theUsername.trim().equalsIgnoreCase(firstNameFromDB) && 
                                                     thePassword.trim().equalsIgnoreCase(passwordFromDB)){

                    Intent intent2 = new Intent(EntryActivity.this,
                            NfcscannerActivity.class);
                    intent2.setAction(CUSTOM_QRCODE_ACTION);
                    intent2.putExtra("carerid", carerID);
                    startActivity(intent2);

                    }
                }


            return true;                    

                }



        case R.id.changeuser:


AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

            alertDialogBuilder.setMessage("Are you sure you want to change user? All call history and messages will be deleted.")
            .setCancelable(false)
            .setPositiveButton("OK",
            new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){

                Log.e(TAG, "change user button clicked");
                nfcscannerapplication.loginValidate.deleteTableCarer();
                nfcscannerapplication.loginValidate.deleteTableTransactions();
                Toast.makeText(
                        EntryActivity.this,
                        "Carer logged out",
                        Toast.LENGTH_LONG).show();
                EntryActivity.this.onCreate(sIs);

            }
            });
            alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){



            }
            });
            AlertDialog alert = alertDialogBuilder.create();
            alert.show();


            return true;



        default:

            return super.onOptionsItemSelected(item);
        }
    }
4

2 に答える 2

2

を追加

break;

スイッチの各項目の最後。

于 2013-07-24T08:24:02.763 に答える
0

switch ステートメントのケースでフォールスルーが発生しています。

theUsername.trim().equalsIgnoreCase("")に計算されるまで、すべて問題ありませんtrue。実行は if ブロックに入り、return ステートメントをバイパスして、次のように進みます。case R.id.changeuser:

case R.id.login:

        Log.e(TAG, "login clicked from opts menu");

            theUsername = userName.getText().toString();

            if(theUsername.trim().equalsIgnoreCase("")){
                 Toast.makeText(
                        EntryActivity.this,
                        "Please enter a valid name.",
                        Toast.LENGTH_LONG).show();
                onCreate(sIs);

            }else{
于 2013-07-24T08:29:32.360 に答える