簡體   English   中英

為什么即使“如果”為真,也僅執行“其他”部分?

[英]Why is only 'else' part getting executed, even if 'if' is true?

這是我的主要活動:

package com.santosh.sampleapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;

public class Main extends Activity
{
    EditText password_field;
    TextView tv_err;
    Button login;
    /** Called when the activity is first created. */
    @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        password_field = (EditText) findViewById(R.id.password_field);
        tv_err = (TextView)findViewById(R.id.tv_err);
        login = (Button)findViewById(R.id.login);
        final String password = password_field.getText().toString();


        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (password.equals("password")) {
                        tv_err.setText("good pass");
                    } else {
                        tv_err.setText("wrong pass");
                    }
                } catch (Exception e) {
                    tv_err.setText(e.toString());
                }

            }
        });
    }
}

即使我在文本視圖中鍵入password ,它也會顯示wrong pass消息。

這是我的src / layout / main.xml,如果有幫助的話:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<EditText android:id="@+id/password_field"
    android:hint="@string/password_hint"
    android:inputType="textPassword"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
<Button android:id="@+id/login"
    android:text="@string/get_message"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    />
<TextView android:id="@+id/tw_err"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    />
</LinearLayout>

從onClick方法內的TextView獲取密碼:

public void onClick(View v) {
    try {
        final String password = password_field.getText().toString();
        if (password.equals("password")) {
            tv_err.setText("good pass");
        } else {
            tv_err.setText("wrong pass");
        }
    } catch (Exception e) {
        tv_err.setText(e.toString());
    }
}

因為password未更新。 它包含原始值。 像這樣更新:

if (password_field.getText().toString().equals("password")) {

順便說一句:盡可能繼續使用final關鍵字! 最小化應用程序中的可變狀態,您將成為一個快樂的人。

因為您正在獲取密碼字符串onCreate()方法。因此不會更新。因此您可以在單擊按鈕的事件后找到密碼值。

所以把這條線

final String password = password_field.getText().toString();

點擊按鈕后...

如下更改您的登錄按鈕單擊偵聽器:

login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                 final String strPassword=password_field.getText().toString(); 
                    if (TextUtils.equals(strPassword, "password")) {
                        tv_err.setText("good pass");
                    } else {
                        tv_err.setText("wrong pass");
                    }
                } catch (Exception e) {
                    tv_err.setText(e.toString());
                }

            }
        });

將EditText的值放入Click Listener中的String變量中。

嘗試如下:

  login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String password = password_field.getText().toString(); try { if (password.equals("password")) { tv_err.setText("good pass"); } else { tv_err.setText("wrong pass"); } } catch (Exception e) { tv_err.setText(e.toString()); } } }); 

單擊登錄按鈕時,密碼字符串未更新,請刪除以下行:

final String password = password_field.getText().toString();

檢查onClick偵聽器中的字符串:

login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                if (password_field.getText().toString().equals("password")) {
                    tv_err.setText("good pass");
                } else {
                    tv_err.setText("wrong pass");
                }
            } catch (Exception e) {
                tv_err.setText(e.toString());
            }
        }
    });

無需使用String password = password_field.getText().toString(); 它為字符串分配內存,因此直接檢查:

if (password_field.getText().toString().equals("password"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM