2013-10-22 47 views
0

我創建了登錄系統進行簡單的測試在Android上,但問題是,無論我把密碼字段,系統將登錄如何解決這個錯誤?????的Android登錄例如不工作如何解決它

loginActivity

package com.exercise.AndroidNavigationTabs; 

import android.animation.Animator; 
import android.animation.AnimatorListenerAdapter; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Build; 
import android.os.Bundle; 
import android.text.TextUtils; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.View; 
import android.view.inputmethod.EditorInfo; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

/** 
* Activity which displays a login screen to the user, offering registration as 
* well. 
*/ 
public class LoginActivity extends Activity { 

    public static final String EXTRA_EMAIL = "com.example.android.authenticatordemo.extra.EMAIL"; 

    /** 
    * Keep track of the login task to ensure we can cancel it if requested. 
    */ 
    private UserLoginTask mAuthTask = null; 

    // Values for email and password at the time of the login attempt. 
    private String mEmail = "[email protected]"; 
    private String mPassword; 

    // UI references. 
    private EditText mEmailView; 
    private EditText mPasswordView; 
    private View mLoginFormView; 
    private View mLoginStatusView; 
    private TextView mLoginStatusMessageView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 

     // Set up the login form. 
     mEmail = getIntent().getStringExtra(EXTRA_EMAIL); 
     mEmailView = (EditText) findViewById(R.id.email); 
     mEmailView.setText(mEmail); 

     mPasswordView = (EditText) findViewById(R.id.password); 
     mPasswordView 
       .setOnEditorActionListener(new TextView.OnEditorActionListener() { 
        @Override 
        public boolean onEditorAction(TextView textView, int id, 
          KeyEvent keyEvent) { 
         if (id == R.id.login || id == EditorInfo.IME_NULL) { 
          attemptLogin(); 
          return true; 
         } 
         return false; 
        } 
       }); 

     mLoginFormView = findViewById(R.id.login_form); 
     mLoginStatusView = findViewById(R.id.login_status); 
     mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message); 

     findViewById(R.id.sign_in_button).setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         attemptLogin(); 
        } 
       }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.login, menu); 
     return true; 
    } 

    /** 
    * Attempts to sign in or register the account specified by the login form. 
    * If there are form errors (invalid email, missing fields, etc.), the 
    * errors are presented and no actual login attempt is made. 
    */ 
    public void attemptLogin() { 
     if (mAuthTask != null) { 
      return; 
     } 

     // Reset errors. 
     mEmailView.setError(null); 
     mPasswordView.setError(null); 

     // Store values at the time of the login attempt. 
     mEmail = mEmailView.getText().toString(); 
     mPassword = mPasswordView.getText().toString(); 

     boolean cancel = false; 
     View focusView = null; 

     // Check for a valid password. 
     if (TextUtils.isEmpty(mPassword)) { 
      mPasswordView.setError(getString(R.string.error_field_required)); 
      focusView = mPasswordView; 
      cancel = true; 
     } else if (mPassword.length() < 4) { 
      mPasswordView.setError(getString(R.string.error_invalid_password)); 
      focusView = mPasswordView; 
      cancel = true; 
     } 
     else if(mPassword != "jamil123"){ 
      mPasswordView.setError(getString(R.string.error_incorrect_password)); 
      focusView = mPasswordView; 
      cancel = true; 

     } 

     // Check for a valid email address. 
     if (TextUtils.isEmpty(mEmail)) { 
      mEmailView.setError(getString(R.string.error_field_required)); 
      focusView = mEmailView; 
      cancel = true; 
     } else if (!mEmail.contains("@")) { 
      mEmailView.setError(getString(R.string.error_invalid_email)); 
      focusView = mEmailView; 
      cancel = true; 
     } 

     if (cancel) { 
      // There was an error; don't attempt login and focus the first 
      // form field with an error. 
      focusView.requestFocus(); 
     } else { 
      // Show a progress spinner, and kick off a background task to 
      // perform the user login attempt. 
      mLoginStatusMessageView.setText(R.string.login_progress_signing_in); 
      showProgress(true); 
      mAuthTask = new UserLoginTask(); 
      mAuthTask.execute((Void) null); 

      Intent intent = new Intent(this, AndroidNavigationTabsActivity.class); 
      startActivity(intent); 

      Toast.makeText(getBaseContext(), "login Success", Toast.LENGTH_LONG).show(); 
     } 
    } 

    /** 
    * Shows the progress UI and hides the login form. 
    */ 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
    private void showProgress(final boolean show) { 
     // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow 
     // for very easy animations. If available, use these APIs to fade-in 
     // the progress spinner. 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
      int shortAnimTime = getResources().getInteger(
        android.R.integer.config_shortAnimTime); 

      mLoginStatusView.setVisibility(View.VISIBLE); 
      mLoginStatusView.animate().setDuration(shortAnimTime) 
        .alpha(show ? 1 : 0) 
        .setListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          mLoginStatusView.setVisibility(show ? View.VISIBLE 
            : View.GONE); 
         } 
        }); 

      mLoginFormView.setVisibility(View.VISIBLE); 
      mLoginFormView.animate().setDuration(shortAnimTime) 
        .alpha(show ? 0 : 1) 
        .setListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          mLoginFormView.setVisibility(show ? View.GONE 
            : View.VISIBLE); 
         } 
        }); 
     } else { 
      // The ViewPropertyAnimator APIs are not available, so simply show 
      // and hide the relevant UI components. 
      mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE); 
      mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); 
     } 
    } 

    /** 
    * Represents an asynchronous login/registration task used to authenticate 
    * the user. 
    */ 
    public class UserLoginTask extends AsyncTask<Void, Void, Boolean> { 
     @Override 
     protected Boolean doInBackground(Void... params) { 
      // TODO: attempt authentication against a network service. 

      try { 
       // Simulate network access. 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       return false; 
      } 

      for (String credential : DUMMY_CREDENTIALS) { 
       String[] pieces = credential.split(":"); 
       if (pieces[0].equals(mEmail)) { 
        // Account exists, return true if the password matches. 
        return pieces[1].equals(mPassword); 
       } 
      } 

      // TODO: register the new account here. 
      return true; 
     } 

     @Override 
     protected void onPostExecute(final Boolean success) { 
      mAuthTask = null; 
      showProgress(false); 

      if (success) { 
    //   finish(); 

      } else { 
       mPasswordView 
         .setError(getString(R.string.error_incorrect_password)); 
       mPasswordView.requestFocus(); 
      } 
     } 

     @Override 
     protected void onCancelled() { 
      mAuthTask = null; 
      showProgress(false); 
     } 
    } 
} 
+0

你可以做日誌查看哪些if子句將該值設置爲true? – wwjdm

+0

@dymmeh所以你的意思是我不能在actionListener中調用attemptLogin()?以及我在哪裏可以稱它? – LebDev

+0

嘗試使用(!mPassowrd.equals(「jamil123」))而不是mPassword!=「jamil123」。另外,從視圖中獲取mPassword後,打印出mPassword以確保從UI獲得正確的值。 – DntFrgtDSemiCln

回答

1

對於需要使用.equals()字符串比較。所以你的行 else if(mPassword != "jamil123")應該是else if(!mPassword.equals("jamil123"))

1

不要使用==!=比較字符串內容。 Strings是對象,並且相等運算符測試以查看兩個對象是否是相同的對象。這是一個長期的討論(谷歌字符串實習),但==有時可能會工作。

取而代之,使用!mPassword.equals("jamil123")

+0

@西蒙沒有它仍然是我一樣改變!mPassword.equals(「jamil123」),但仍然是相同的錯誤 – LebDev

+0

不。現在你有一個不同的錯誤。學習使用調試器並逐步瞭解您的代碼,以瞭解發生了什麼。 – Simon

0

UserLoginTask請注意,它將return true這就是爲什麼successonPostExecute將始終驗證登錄爲true。

Android將會爲您提供的模板,但它是你將它調整到您的需要。


下面是一個例子

您必須在恆定的位置:

private String mEmail = "[email protected]"; 
private String mPassword ="jamil123"; 

然後創建一個驗證這個功能,然後返回一個布爾值

private boolean loginUser(String email, String Password) { 
boolean isValid = false; 

if(email.equals(mEmail) && Password.equals(mPassword)) 
{ 
    isValid = true; 
} 


return isValid; 
} 

最後,你有你的asynctask像這樣:

public class UserLoginTask extends AsyncTask<Void, Void, Boolean> { 
    @Override 
    protected Boolean doInBackground(Void... params) { 
      return loginUser("[email protected]", "jamil123"); 
    } 

    @Override 
    protected void onPostExecute(final Boolean success) { 
     mAuthTask = null; 
     showProgress(false); 

     if (success) { 
         //Success!! 
     } else { 
         // fail :(
     } 
    } 

    @Override 
    protected void onCancelled() { 
     mAuthTask = null; 
     showProgress(false); 
    } 
} 
+0

@ meda如何調整此代碼以獲得這個簡單的應用程序的成功,你的意思是它不能返回true? – LebDev

+0

@lebDev它必須從您的自定義函數返回一個布爾值 – meda

+0

@LebDev我添加了更多的代碼,它只是爲了演示 – meda

相關問題