2013-07-01 3 views
1

작동시키기위한 코드를 추가해야하는 내용과 장소는 무엇입니까? 기본적으로 아무 것도하지 않으며 단추는 "로그인 또는 등록"을 표시하지만 등록 활동은 표시하지 않습니다. 메뉴에서 "잃어버린 암호 복구"도 아무 것도하지 않습니다. finish() 후에 인 텐트를 작성하여 서명 한 후 새 액티비티를 열 수있었습니다. 이메일과 비밀번호에 관계없이 성공적으로 로그인합니다.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" 
     }; 

그러나이 템플릿 코드는 웹 서비스 데이터베이스 또는 이와 유사한 것에 대한 로그인을위한 것입니다. 로컬 데이터베이스에 로그인하려면 AsyncTask mumbo jumbo가 필요하지 않습니다. cancel! = true 일 때 trylogin() 함수에 인증 코드를 쓸 수 있습니다.

관련 문제