로그인 정보를 SharedPreferences에 저장하기!
스피너로 로그인 주체를 정해서 로그인하는 방식이기 때문에.. 자동 로그인은 안하고 로그인 정보만 저장해놓을 것이다.
로그인 정보 저장, 자동 로그인까지!
코드를 보자!
xml
<LinearLayout
android:id="@+id/Layoutcustlogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/c_editText_main_searchID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:textSize="12dp"
android:paddingHorizontal="15dp"
android:paddingVertical="15dp"
android:hint="아이디"
android:inputType="text"
android:background="@drawable/round_1w_r3_style" />
<EditText
android:id="@+id/c_editText_main_searchPWD"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="5dp"
android:textSize="12dp"
android:paddingVertical="15dp"
android:paddingHorizontal="15dp"
android:hint="패스워드"
android:inputType="text"
android:background="@drawable/round_1w_r3_style" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="로그인 정보 저장"
android:id="@+id/cLoginCheck"
android:layout_marginTop="20dp"
android:layout_marginHorizontal="10dp"
android:layout_gravity="left"/>
<Button
android:id="@+id/c_login_btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="10dp"
android:backgroundTint="#000000"
android:text="로그인"
android:textColor="@color/white" />
</LinearLayout>
맨 위에 스피너에서 '소비자'를 선택했을 때의 layout이다.
class
public class MainActivity extends AppCompatActivity{
private static String IP_ADDRESS = IP_ADDRESS;
private static String TAG = "loginActivity";
EditText cID, cPassword;
Button cIdSignInButton;
CheckBox cLogin;
SharedPreferences cpref;
SharedPreferences.Editor ceditor;
Boolean cloginChecked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cID = (EditText) findViewById(R.id.c_editText_main_searchID);
cPassword = (EditText) findViewById(R.id.c_editText_main_searchPWD);
// Button
cIdSignInButton = (Button) findViewById(R.id.c_login_btn);
LinearLayout layoucustlogin = (LinearLayout) findViewById(R.id.Layoutcustlogin);
cLogin = (CheckBox) findViewById(R.id.cLoginCheck);
cLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){ // autologin 체크
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
cloginChecked = true;
}
else{ // augologin 취소
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
cloginChecked = false;
ceditor.clear();
ceditor.commit();
}
}
});
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
if (cpref.getBoolean("autoLogin", false)) {
cID.setText(cpref.getString("id", ""));
cPassword.setText(cpref.getString("pw", ""));
cLogin.setChecked(true);
}
Spinner loginspinner = (Spinner) findViewById(R.id.loginspinner);
loginspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if(i==0){ //customer
layoutmanulogin.setVisibility(View.GONE);
layoutdislogin.setVisibility(View.GONE);
layoushoplogin.setVisibility(View.GONE);
layoucustlogin.setVisibility(View.VISIBLE);
// customer 로그인 버튼 클릭
cIdSignInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String id = cID.getText().toString();
String pwd = cPassword.getText().toString();
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{
JSONObject jsonObject = new JSONObject(response);
boolean success = jsonObject.getBoolean("success");
if(success){
Toast.makeText(getApplicationContext(), "로그인에 성공했습니다.", Toast.LENGTH_SHORT).show();
if(cloginChecked) {
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
ceditor.putString("id", id);
ceditor.putString("pw", pwd);
ceditor.putBoolean("autoLogin", true);
ceditor.commit();
} else{}
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
Intent intent = new Intent(MainActivity.this, csm_Activity.class);
// 로그인 하면서 사용자 정보 넘기기
intent.putExtra("name", name);
intent.putExtra("id", id);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "로그인에 실패했습니다.", Toast.LENGTH_SHORT).show();
return;
}
} catch(Exception e){
e.printStackTrace();
}
}
};
cLoginRequest cloginRequest = new cLoginRequest(id, pwd, responseListener);
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(cloginRequest);
}
});
}
//등등... 나머지 스피너 내용은 위와 같다
여기서 봐야하는 부분
cLogin = (CheckBox) findViewById(R.id.cLoginCheck);
cLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){ // autologin 체크
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
cloginChecked = true;
}
else{ // augologin 취소
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
cloginChecked = false;
ceditor.clear();
ceditor.commit();
}
}
});
로그인 체크박스를 누르면 cloginChecked = true가 되고 체크를 풀면 false + sharedpreferences에 저장했던 데이터를 clear하고 commit한다.
cIdSignInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String id = cID.getText().toString();
String pwd = cPassword.getText().toString();
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{ // 로그인에 성공했을 때
JSONObject jsonObject = new JSONObject(response);
boolean success = jsonObject.getBoolean("success");
if(success){
Toast.makeText(getApplicationContext(), "로그인에 성공했습니다.", Toast.LENGTH_SHORT).show();
if(cloginChecked) {
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = mpref.edit();
ceditor.putString("id", id);
ceditor.putString("pw", pwd);
ceditor.putBoolean("autoLogin", true);
ceditor.commit();
} else{}
이 코드에서 제일 마지막 부분
if loginChecked가 true이면 = 체크박스가 눌린 상태이면
sharedPreferences에 id, pwd 내용을 저장하고 commit한다!
이 코드를 수행한 뒤
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
if (cpref.getBoolean("autoLogin", false)) {
cID.setText(cpref.getString("id", ""));
cPassword.setText(cpref.getString("pw", ""));
cLogin.setChecked(true);
}
앱을 시작했을 때 sharedPreferences에 저장한 데이터를 받아오는 것이다~!
그리고 여기에 다음으로 넘어갈 화면을 연결해주면 로그인 정보 저장 뿐 아니라 자동 로그인도 되는 것이다~~~