3월 7~8일(2)

SJY0000·2022년 3월 9일
0

Android

목록 보기
7/15

오늘 배운 것

  • Android Studio로 TODO Project App 만들기(2)

Login 화면 만들기

  • 자동로그인 체크선택 시 파일을 만들어 체크여부와 아이디 정보를 적어 다시 App을 킬 때 로그인 없이 메인화면을 호출 할 수 있도록 함
  • Intent를 이용하여 이동할 페이지에 Id 값을 넘겨 줄 수 있도록 함
  • AlertDialog 에 setPositiveButton,setNegativeButton,setNeutralButton 으로 버튼 3개를 추가하고 함수를 추가할 수 있음

package com.example.todo;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.example.todo.domain.User;
import com.example.todo.domain.UserOneResult;
import com.example.todo.retrofit.RetrofitClient;
import com.example.todo.retrofit.UserService;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class LoginActivity extends AppCompatActivity {

    private String id, pwd;
    private EditText userID, userPassword;
    private CheckBox chkRememberMe;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_login);

        // 하위호환성을 위하면 Compat이 붙은 클래스를 사용
        // 액션바 숨기기
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();

        // 뷰 참조 가져오기
        userID = findViewById(R.id.userID);
        userPassword = findViewById(R.id.userPassword);
        chkRememberMe = findViewById(R.id.chkRememberMe);
        Button btnQuit = findViewById(R.id.btnQuit);
        Button btnJoin = findViewById(R.id.btnJoin);
        Button btnLogin = findViewById(R.id.btnLogin);

        // 종료버튼에 이벤트 연결하기
        btnQuit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showQuitMessage();
            }
        });
        // 회원가입 버튼 눌렀을 때
        btnJoin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), JoinActivity.class);
                startActivity(intent);
            }
        });
        // 로그인 버튼 클릭 이벤트 연결하기
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                processLogin();
            }
        });

        // 람다 표현식 : 추상메소드를 하나만 가진 인터페이스 구현 객체를 만들 때 사용가능
//        btnQuit.setOnClickListener(view -> finish());
    } // Oncreate






    private void processLogin() {
        // 사용자 입력값 가져오기
        id = userID.getText().toString().trim();
        pwd = userPassword.getText().toString().trim();

        // 사용자 입력값 검증하기
        // 사용자 입력값과 DB 정보와 비교하기
        RequestGetUser(id);
    }//processLogin

    private void RequestGetUser(String id) {
        UserService userService = RetrofitClient.getUserService();

        Call<UserOneResult> call = userService.getUser("one",id);

        call.enqueue(new Callback<UserOneResult>() {
            @Override
            public void onResponse(Call<UserOneResult> call, Response<UserOneResult> response) {
                if (!response.isSuccessful())  return;

                UserOneResult userOneResult = response.body();

                User user = userOneResult.getUser();

                boolean isSame = compareIdPwd(user);
                if (!isSame) { // isSame == false   // 로그인 실패
                    Toast.makeText(getApplicationContext(),"아이디 또는 비밀번호가 다릅니다.", Toast.LENGTH_LONG).show();
                    userID.requestFocus();
                    return;
                }
                // 로그인 성공 처리 (로그인 상태 유지 처리, 메인 액티비티 화면으로 이동)
                processLoginSuccess();
            }

            @Override
            public void onFailure(Call<UserOneResult> call, Throwable t) {

            }
        });

    }//RequestGetUser

    private void processLoginSuccess() {
        // 자동 로그인 체크되어있으면 SharedPreferences로 파일 저장
        if (chkRememberMe.isChecked()) {
            saveRememeberMe();
        }
        Intent intent = new Intent(this, MainActivity.class);

        // 1)
        intent.putExtra("loginId",id);
        // 2)
//        Bundle bundle= new Bundle();
//        bundle.putString("loginId", id);
//        intent.putExtras(bundle);


        // 메인 액티비티 띄우기
        startActivity(intent);

        finish(); // 현재 화면 액티비티 종료
    }//processLoginSuccess

    private void saveRememeberMe() {
                                                        // (파일 이름, 현재 파일 안에서만 사용) 파일 생성
        SharedPreferences pref = getSharedPreferences("todo", Activity.MODE_PRIVATE);

        SharedPreferences.Editor editor = pref.edit();

        editor.putBoolean("rememberMe", true); // 파일에 자동로그인 체크 입력
        editor.putString("loginId", id); // 파일에 id 정보 입력
        editor.commit();

    }// saveRememeberMe

    private boolean compareIdPwd(User user) {
        boolean isSame = false;
        if (user != null) { // 아이디 일치
            if (pwd.equals((user.getPassword()))) { // 비밀번호 일치
                isSame = true;
            } else { // 비밀번호 불일치
                isSame = false;
            }
        }
        return isSame;
    }//compareIdPwd

    public void showQuitMessage() {
       AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle("종료")
                                            .setMessage("정말 종료하시겠습니까?")
                                            .setIcon(android.R.drawable.ic_dialog_alert)
                                            .setPositiveButton("예", (dialogInterface, i) -> finish())
//                                            .setNeutralButton("취소", null)
                                            .setNegativeButton("아니오", null)
                                            .create(); // 경고창 설정 및 객체생성
       alertDialog.show(); // 경고창 띄우기

    }
}

Login 성공 시 넘어갈 Main화면에서 Id값이 제대로 넘어오는지 확인

package com.example.todo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 인텐트 객체 참조 가져오기
        Intent intent = getIntent();
        // 1)
        String loginId = intent.getStringExtra("loginId");
        // 2)
//        Bundle bundle = intent.getExtras();
//        loginId = bundle.getString("loginId");

        textview = findViewById(R.id.textView3);
        textview.append( "\n 로그인 아이디 : " + loginId);
    }
}

0개의 댓글

관련 채용 정보