아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-04-21안드로이드 스튜디오(데이터베이스 reaml 활용2)

아옳옳 2021. 4. 22. 09:31
728x90
반응형

어제 배운 내용에 몇가지 기능들을 추가하여 보았다 

코드는 어제코드에 몇가지 추가 된것이라 추가 된 부분만 올려 놓도록 하겠다 

 

추가한 내용들은 지금 까지 배운것들을 활용하여 로그인할때 자동로그인 기능과 해당카드뷰를 눌럿을때 스낵바가 출력되고 길게 눌럿을 경우에는 삭제와 함께 로그인이 해지되는것을 하도록 하겠다 

 

내가 혼자서 해결해볼려고 자동로그인과 삭제까지는 했으나 강사님께서 한게 더욱 깔끔해서,.. 강사님이 한거 올리도록 하겠다 

 

자동 로그인 기능 

public class LoginActivity extends AppCompatActivity {

    EditText etEmail, etPassword;

    Realm realm;
    RealmResults<Member> results;
    CheckBox cb_login_save;

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

        etEmail = findViewById(R.id.et_email);
        etPassword = findViewById(R.id.et_password);
        Button bt_ok = findViewById(R.id.bt_login_ok);
        cb_login_save = findViewById(R.id.cb_login_save);


        realm = Realm.getDefaultInstance();
        bt_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RealmQuery<Member> query = realm.where(Member.class);
                results = query.equalTo("email",etEmail.getText().toString()).findAll();
                if(results.size()==0){
                    Toast.makeText(getApplicationContext(),"일치하는 회원정보가 없습니다",Toast.LENGTH_LONG).show();
                }else{
                    if(results.get(0).getPassword().equals(etPassword.getText().toString())){
                        Intent intent = new Intent();
                        intent.putExtra("Name", results.get(0).getName());
                        intent.putExtra("Email", results.get(0).getEmail());
						/////////////////메소드 호출//////////
                        passwordChecked();
						/////////////////////////////////////
                        setResult(RESULT_OK, intent);
                        finish();
                    }else{
                        Toast.makeText(getApplicationContext(),"비밀번호가 틀렸습니다",Toast.LENGTH_LONG).show();
                    }
                }
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        realm.close();
    }
///////////////추가된 메소드 로그인  //////////////////
    void passwordChecked(){
        if(cb_login_save.isChecked()){ // 체크박스 체크 상태라면 
            SharedPreferences preferences = getSharedPreferences("login_prefs", MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("name", results.get(0).getName());
            editor.putString("email", etEmail.getText().toString());
            editor.putString("password", etPassword.getText().toString());
            editor.commit();
			// 쉐어드 프리퍼런스로 보내준다 
        }else{
            SharedPreferences preferences = getSharedPreferences("login_prefs", MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            editor.clear();
            editor.commit();
        }
    }
    
    ===================================================================
    
    메인액티비티 onCreat
    //저장된 쉐어프리퍼런스 받아서 활용 
    preferences = getSharedPreferences("login_prefs", MODE_PRIVATE);
        String userName = preferences.getString("name", "");
        String userEmail = preferences.getString("email", "");
        userpassword = preferences.getString("password","");

        if (!userEmail.isEmpty()){
            tvNotice.setText(userName+"("+userEmail+")으로 로그인 했습니다.");
            btLogin.setText("로그아웃");
            isLogin=true;
        } else {
            tvNotice.setText("로그인 후 이용해 주세요.");
        }

/////////////////////스위치에 로그인 버튼 
        if(isLogin){
                    SharedPreferences preferences = getSharedPreferences("login_prefs", MODE_PRIVATE);
                    SharedPreferences.Editor editor = preferences.edit();
                    editor.clear();
                    editor.commit();
                    btLogin.setText("로그인");
                    tvNotice.setText("로그인 후 이용해 주세요.");
                    isLogin=false;
                }else{
                    Intent loginIntent = new Intent(this,LoginActivity.class);
                    startActivityForResult(loginIntent,0);
                }
   

스낵바 및 삭제 기능 

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false);
        view.setOnLongClickListener(this);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = recyclerView.getChildAdapterPosition(v);
                Snackbar.make(v, mDataset.get(position).getName()+", "+mDataset.get(position).getAge()+"세, "+mDataset.get(position).getEmail()+"\n"
                        +"길게 누르시면 삭제됩니다..^^",Snackbar.LENGTH_LONG).show();
            }
        });
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.mName.setText(mDataset.get(position).getName());
        holder.mAge.setText(String.valueOf(mDataset.get(position).getAge())+"세");
        holder.mEmail.setText(mDataset.get(position).getEmail());
        holder.mPhoto.setImageURI(Uri.parse(mDataset.get(position).getUri()));
    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }

    @Override
    public boolean onLongClick(View v) {

        int position = recyclerView.getChildAdapterPosition(v);

        realm.executeTransactionAsync(new Realm.Transaction() {

            @Override
            public void execute(Realm realm) {

                Member member = realm.where(Member.class).findAll().get(position);

                if(member!=null){

                    member.deleteFromRealm();

                }else{
                    return;
                }
            }
        });

            Snackbar.make(v,mDataset.get(position).getName()+" 항목이 삭제되었습니다",Snackbar.LENGTH_SHORT).show();
            if(mDataset.get(position).getEmail().equals(MainActivity.email)){
                SharedPreferences preferences = context.getSharedPreferences("login_prefs", MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.clear();
                editor.commit();
                MainActivity.tvNotice.setText("로그인 후 이용해 주세요.");
                MainActivity.btLogin.setText("로그인");

            }

        return true;
    }

 

어제 코드에 이부분들만 추가해준다면 추가 기능을 사용할 수 있다 .

728x90
반응형