2013-07-01 127 views
1

什麼和我應該在哪裏添加代碼使其工作? 默認情況下,它不執行任何操作,按鈕顯示「登錄或註冊」,但不顯示任何註冊活動。 菜單中的「恢復丟失的密碼」也不起作用。 我完成()後創建一個意圖簽署後,設法打開一個新的活動; 儘管它登錄成功,不管電子郵件和密碼!Android登錄活動模板

編輯:這是代碼!

public class LoginActivity extends Activity 
{ 
/** 
* A dummy authentication store containing known user names and passwords. 
* TODO: remove after connecting to a real authentication system. 
*/ 
private static final String[] CREDENTIALS = new String[] 
     { 
     "[email protected]:12345", "[email protected]:54321" 
     }; 

/** 
* The default email to populate the email field with. 
*/ 
public static final String EXTRA_EMAIL = "[email protected]"; 

/** 
* 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; 
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.activity_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; 
    } 

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

/** 
* 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 : 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. 
     //CREDENTIALS[2]=mEmail+":"+mPassword; tried this for regisration 
     return true; 
    } 

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

     if (success) 
     { 
      finish(); 
      Intent myIntent = new Intent(LoginActivity.this,CalculatorActivity.class); 
      LoginActivity.this.startActivity(myIntent); 
     } else 
     { 
      mPasswordView 
        .setError(getString(R.string.error_incorrect_password)); 
      mPasswordView.requestFocus(); 
     } 
    } 

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

}

這非常適用於在憑據的默認字符串,但我不知道如何實現登記過程中,我該如何添加這些mEmail和mPassword全權證書字符串?

+0

好吧,你使用Eclipse嗎? – yams

+0

發佈一些代碼,我們可以幫助。 – yams

+1

你正在談論的模板只是一個簡單的模板,只是最基本的基本佈局,它的目的是成爲開發者的開始,而不是整個過程。尤其是這個過程根據需求而變化。 – LuckyMe

回答

1

CREDENTIALS只是在程序的前幾行定義的字符串數組,您可以手動對其進行編輯。例如:

private static final String[] CREDENTIALS = new String[] 
     { 
     "[email protected]:12345", "[email protected]:54321", "[email protected]:1234" 
     }; 

但是這個模板代碼旨在用於登錄web服務數據庫或類似的東西。如果您想要在本地數據庫上登錄,則不需要AsyncTask mumbo jumbo,只需在verify!()函數中寫入驗證代碼即可。