java - 即使 'else' 为 true,为什么只有 'if' 部分被执行?

标签 java android

这是我的主要 Activity :

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());
                }

            }
        });
    }
}

即使我在 TextView 中输入密码,它也会显示一条错误密码消息。

这是我的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>

最佳答案

因为密码没有更新。它包含原始值。像这样更新:

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

顺便说一句:尽可能继续使用 final 关键字!最大限度地减少应用程序中的可变状态,您将成为一个快乐的人。

关于java - 即使 'else' 为 true,为什么只有 'if' 部分被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436982/

相关文章:

Android studio 无法解析 ActionBarActivity

java - 泛型和流 : How to make this into a `StreamTuple::new` statement?

java - 主要 Activity 未正确引用外部 java 类

Android -> iOS 密码迁移

android - 2D 游戏的复杂 android 动画 : what approach?

java - 如何停止一项 Activity 直到其他 Activity 结束?

java - 有谁知道如何使用 Base64 解码和编码 Base64 中的字符串?

java - Spring 中 JPA 存储库接口(interface)投影的最佳实践?

java - Android 适配器 AlertDialog 错误

java - Swing Worker 无法更新模态 jdialog 中的 GUI 组件