티스토리 뷰
우선 제가 구상하는 레이아웃은 아주 기본적으로 아이디, 비밀번호 그리고 로그인 버튼 입니다.
-레이아웃-
id_text, password_text -> EditText
login_button -> Button
그리고 로그인에 대해 말하자면 간단하게 자동로그인을 구현 할 (SharedPreferences) 앱 데이터 저장, API 비동기 연동 (AsyncTask의 doInBackground에서 진행, OutputStream은 HttpUrlConnection(params), InputStream은 JSON) 정도 입니다!
간단한 설명은 끝났고 우선 레이아웃부터 보겠습니다
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.example.practice.login_activity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/email_text"
android:layout_width="0dp"
android:layout_height="54dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="288dp"
android:layout_marginRight="16dp"
android:drawablePadding="8dp"
android:hint="이메일을 입력해주세요."
android:paddingLeft="16dp"
android:textColorHint="#A9ADB4"
android:textCursorDrawable="@null"/>
<EditText
android:id="@+id/password_text"
android:layout_width="0dp"
android:layout_height="54dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="347dp"
android:layout_marginRight="16dp"
android:drawablePadding="8dp"
android:hint="비밀번호를 입력해주세요."
android:paddingLeft="16dp"
android:textColorHint="#A9ADB4"
android:textCursorDrawable="@null"
tools:ignore="DuplicateIds" />
<Button
android:id="@+id/login_button"
android:layout_width="355dp"
android:layout_height="66dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginLeft="13dp"
android:layout_marginTop="421dp"
android:layout_marginRight="13dp"
android:letterSpacing="-0.05"
android:lineSpacingExtra="3sp"
android:text="로그인"
android:textColor="#10171F"
android:textSize="20sp"
android:textStyle="bold"
android:translationY="-1.52sp" />
</RelativeLayout>
</ScrollView>
간단하게 이메일과 비밀번호를 EditText로 하였고 로그인버튼은 Button으로 하였습니다.
각각 기능을 수행하기 위해서는 아이디가 필요하겠죠!
SharedPreferences
우선 자동 로그인 기능을 수행하기위해 SharedPreferences에 대한 지식이 필요해요. SharedPreferences는 앱내부에 간단한(작은양) 데이터를 저장하여 삭제 시 까지 유지시켜 데이터를 보존시킬 수 있습니다.
바로 코드 보여드리겠습니다
public class shared_preferences {
static String pref_user_email = "user_email";
static public SharedPreferences get_shared_preferences(Context ctx) {//모든 액티비티에서 인스턴스 얻음
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
public static void set_user_email(Context ctx, String user_email) {//이메일 저장
SharedPreferences.Editor editor = get_shared_preferences(ctx).edit();
editor.putString(pref_user_email, user_email);
editor.commit();//커밋은 필수
}
public static String get_user_email(Context ctx) {//저장된 이메일 가져오기
return get_shared_preferences(ctx).getString(pref_user_email, "");
}
public static void clear_user(Context ctx) {//로그아웃 시 데이터 삭제
SharedPreferences.Editor editor = get_shared_preferences(ctx).edit();
editor.clear();
editor.commit();//커밋은 필수
}
}
윗 코드를 보시면 저장되는 데이터를 이메일로하였고 로그인시 화면전환, 즉 Intent Activity를 할때 shared_preferences.set_user_email()를 통해 데이터를 앱내부에 글로벌로 저장할 수 있습니다.
다음으로는 clear_user를 보겠습니다. 각 액티비티에서 로그아웃 시 shared_preferences.clear_user()를 통해 데이터를 삭제하고 로그아웃 할 수 있습니다. 커밋은 필수입니다!!!
이제 get_user_email을 보겠는데요, 자동로그인을 체크하려면 로그인 액티비티에서 shared_preferences.get_user_email()이 필요합니다. 우선 먼저 아래에서 자동로그인 체크 시 필요한 코드를 보겠습니다.
/* ↓ 자동로그인 확인 ↓ */
if (shared_preferences.get_user_email(login_activity.this).length() != 0) {//로그인 고유데이터(현재는 이메일) 길이 0 아닐시
Intent intent = new Intent(login_activity.this, main_activity.class);
startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);//액티비티 스택제거
Toast.makeText(getApplicationContext(), "자동 로그인 되었습니다", Toast.LENGTH_SHORT).show();
finish();
}
get_user_email에서 return 값을 ""로 설정하였는데 set_user_email 시 데이터가 들어와 새로운 데이터로 설정이 됩니다. 처음값이 없으니 length가 0이겠고 이제 값이 들어오면 0이 아니게 되겠죠? 그래서 조건문은 length != 0 으로 잡아주고 true일 때, 바로 메인 액티비티로 전환되도록 하였습니다.
이번 시간에는 SharedPreferences에 대해 알아보았는데요! 다음시간에는 AsyncTask에 대해 알아보겠습니다~
*번외*
sharedpreferences는 앱 데이터베이스라 하기에는 너무 적은양의 데이터만 저장할 수 있어서, 추후에 Room에 대해 학습 후 포스팅 하도록 하겠습니다.
'Android' 카테고리의 다른 글
<Android> custom listview 생성하기 (2) (0) | 2020.08.03 |
---|---|
<Android> 로그인 기능 구현 (2) (0) | 2020.07.28 |
<Android> custom listview 생성하기 (1) (0) | 2020.07.24 |
<Android> Activity 스택 제거 (0) | 2020.07.14 |
<Android> EditText 엔터키 막기 (0) | 2020.07.14 |
- Total
- Today
- Yesterday
- 자동로그인
- AOP
- POJO
- Android
- CustomListView
- Framework
- 자바
- 제어의 역행
- DataBinding
- setOnKeyListener
- 톰캣
- Enterkey
- 이클립스
- tomcat
- spring
- 로그인
- ViewModel
- Kotlin
- livedata
- ADAPTER
- MutableLiveData
- listview
- ViewModelFactory
- Eclipse
- SharedPreferences
- 안드로이드
- kotiln
- 스프링
- 스택제거
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |