2013-07-02 2 views
0

이것은 크레디틴의 기본 문자열에 잘 적용되지만 등록 프로세스를 구현하는 방법을 모릅니다. mEmail 및 mPassword를 CREDENTIALS 문자열에 어떻게 추가합니까? 템플릿에 TODO 등록 새 계정 여기에 AsyncTask 프롬프트가 있습니다.안드로이드에서의 등록 절차 로그인 활동 템플릿

public class LoginActivity extends Activity 
{ 
/** 
* A dummy authentication store containing known user names and passwords. 
* TODO: remove after connecting to a real authentication system. 
*/ 
// 
//before 
//private static final String[] CREDENTIALS = new String[] 
// { 
// "[email protected]:12345", "[email protected]:54321" 
// }; 
//after 
ArrayList<String> CREDENTIALS = new ArrayList<String>(Arrays.asList("[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.add(mEmail+":"+mPassword); 
    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); 
} 
} 

답변

0

여기에 String [] CREDENTIALS가 사용되었습니다. String 배열은 final이며 선언되어 있습니다. 따라서 String Array 대신 String의 ArrayList를 사용해야합니다.

다음 U는 mEmailView &의 텍스트를 ":"로 추가 할 수 있습니다. 이제이 새로운 String을 당신의 Arraylist CREDENTIALS에 추가하십시오.

+0

안녕하세요 @geet! 제가 다음 '개인 정적 최종 문자열 [] CREDENTIALS 대체 = 새로운 String []를 { "[email protected] : 12345", "[email protected] : 54321" } 와'' 의 ArrayList CREDENTIALS = 새로운 ArrayList를 (Arrays.asList ("[email protected] : 12345", "[email protected] : 54321")); '및' CREDENTIALS.add (mEmail + 추가 "를"+ mPassword); 등록 TODO 아래에 있지만 여전히 등록되어 있지 않습니다. 무엇을 잘못하고 있습니까? –

+0

편집 : 코드에서 직접 업데이트됩니다. –

+0

비교에서 equalsIgnoreCase를 사용해보십시오. –