2013-08-26 61 views
0

這是我的主要活動:爲什麼只有'else'部分被執行,即使'if'爲真?

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中鍵入password,它表明我wrong pass消息。

這裏是我的的src /佈局/ 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> 
+0

得到登錄按鈕點擊收聽 – rajeshwaran

+2

password_field值因爲,當您在偵聽器外部聲明密碼時,它不具有當前值,但是它是初始值。 – 2013-08-26 05:10:11

+1

您在登錄按鈕上的單擊事件之前從密碼字段獲取密碼字符串。您應該在onClick事件發生時獲取文本 – NrNazifi

回答

6

因爲password未更新。它包含原始值。更新如下:

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

BTW:繼續使用關鍵字final儘可能!最大限度地減少應用程序中的可變狀態,您將成爲一個快樂的人。

+0

它必須是'password_field.getText()。toString()'在'如果'比較它的兄弟.. –

+0

感謝您的收穫。我無法正確運行代碼。 :) – allprog

+0

哈哈,你的歡迎男人! :) –

6

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

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

監守你得到你的密碼字符串的onCreate()method..Which將不會更新。所以,你要找到按鈕點擊事件發生後您的密碼值.....

所以把此行

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

點擊按鈕後...

0

獲取的EditText的值到點擊監聽器內部的字符串變量。

試試如下:

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

時不會更新點擊登錄按鈕,刪除該線路的口令字符串:

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")) 
1

改變你的登錄按鈕,點擊下面聽衆:

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

      } 
     }); 
相關問題