Android

์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ (SharedPreferences์— ์ €์žฅํ•˜๊ธฐ)

567Rabbit 2024. 6. 13. 15:36

https://codebunny99.tistory.com/170

 

๋ฉ”๋ชจ ์•ฑ app (ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ) Retrofit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค๊ธฐ

Restful API๋ฅผ MySQL๊ณผ ์—ฐ๋™ํ•˜์—ฌ Postman์œผ๋กœ ๊ฐœ๋ฐœํ•œ ํ›„, ์ง„ํ–‰ํ•˜์˜€๋‹ค.     ์•กํ‹ฐ๋น„ํ‹ฐ ์„ธ ๊ฐœ ๋งŒ๋“ค๊ธฐ   ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐRetrofit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ํ•˜๊ธฐ build.gradle.kts(:app)์—์„œimplementation("com.squareup.retrofi

codebunny99.tistory.com

 

 

------------------------------------------------------------------------------------------------------------------------------------------------

 

๊ฒฐ๋ก  ์š”์•ฝํ•˜๊ธฐ

 

onCreate ํ•จ์ˆ˜ ์•ˆ์— ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ,์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๊ณ ,

// ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ

Dialog dialog;

    void showProgress(){
        dialog = new Dialog(this);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.setContentView(new ProgressBar(this));
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }
    
    void dismissProgress(){
        dialog.dismiss();
    }

 

 

Call call = api.register(user); ๋ฅผ ํ†ตํ•ด์„œ, api ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ ,

 

api๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณผ์ •์—์„œ Call<UserRes> ์˜ accessToken(์•ก์„ธ์Šค ํ† ํฐ)์„ ํ˜ธ์ถœํ•˜๊ณ ,

 

์•„๋ž˜์™€ ๊ฐ™์ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ๋œ๋‹ค.

 

SharedPreferences sp = getSharedPreferences(Config.SP_NAME,MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("token", userRes.accessToken);
editor.commit(); //์•ฑ์„ ์‚ญ์ œํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์˜๊ตฌ์ €์žฅํ•ด์ค€๋‹ค

 

 

------------------------------------------------------------------------------------------------------------------------------------------------

 

 

RegisterActivity.java ํด๋ž˜์Šค

 

onCreate ํ•จ์ˆ˜ ์•ˆ์— ์ž‘์„ฑํ•ด์ค€๋‹ค

// ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ

Dialog dialog;

    void showProgress(){
        dialog = new Dialog(this);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.setContentView(new ProgressBar(this));
        dialog.setCancelable(false);
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }
    
    void dismissProgress(){
        dialog.dismiss();
    }

 

 

 

์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

    // ํšŒ์›๊ฐ€์ž… API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

    // 0. ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
    showProgress();

    // 1. ๋ ˆํŠธ๋กœํ• ๋ณ€์ˆ˜ ์ƒ์„ฑ : api ํŒจํ‚ค์ง€์— NetworkClient.java ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    Retrofit retrofit = NetworkClient.getRetrofitClient(RegisterActivity.this);

    // 2. api ํŒจํ‚ค์ง€์— ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ์ฒด๋กœ ์ƒ์„ฑ : api ํŒจํ‚ค์ง€์— ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    UserApi api = retrofit.create(UserApi.class);

    // 3. ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค.
    User user = new User(email, password, nickname);

    // 4. api ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.
    Call<UserRes> call = api.register(user);

    // 5. api๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    call.enqueue(new Callback<UserRes>() {
        @Override
        public void onResponse(Call<UserRes> call, Response<UserRes> response) {
            Log.i("MEMO REGISTER", ""+response.code());

            //๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋จผ์ € ์—†์•ค๋‹ค.
            dismissProgress();

            // 200 OK ์ผ๋•Œ,
            if(response.isSuccessful()){

                UserRes userRes = response.body();
                Log.i("MEMO REGISTER",userRes.accessToken);

                // ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.
                SharedPreferences sp = getSharedPreferences(Config.SP_NAME,MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putString("token", userRes.accessToken);
                editor.commit(); //์•ฑ์„ ์‚ญ์ œํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์˜๊ตฌ์ €์žฅํ•ด์ค€๋‹ค

                // ํšŒ์›๊ฐ€์ž… ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ์ข…๋ฃŒ๋ฅผ ํ•˜๊ณ  ๋ฉ”์ธ์•กํ‹ฐ๋น„ํ‹ฐ๋„์šด๋‹ค.
                Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
                return;


            }else if(response.code() == 500){
                Snackbar.make(btnRegister, "์ด๋ฏธ ํšŒ์›๊ฐ€์ž…ํ•œ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธํ•˜์„ธ์š”.",
                        Snackbar.LENGTH_SHORT).show();
                return;
            }else {
                Snackbar.make(btnRegister, "์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.",
                        Snackbar.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onFailure(Call<UserRes> call, Throwable throwable) {
            //๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋จผ์ € ์—†์•ค๋‹ค.
            dismissProgress();

        }
    });

 

 

 

api

- api๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜์˜€๋‹ค

 

- UserApi

package com.~.memo.api;

import com.~.memo.model.User;
import com.~.memo.model.UserRes;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

public interface UserApi {  //์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

    // HTTP Method ์จ์ฃผ๊ณ , ๊ทธ ์•ˆ์—๋Š” ๊ฒฝ๋กœ๋ฅผ ์จ์ค€๋‹ค.
    // ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์€, Call ์•ˆ์— ์‘๋‹ต์œผ๋กœ ๋ฐ›์„ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
    // ํ•จ์ˆ˜๋ช…์„ ์ž‘์„ฑํ•ด์ฃผ๊ณ , ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ž‘์„ฑ, ๋ฐ›์„ ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌํ„ด์— ์ž‘์„ฑ.
    @POST("/dev/user/register")
    Call<UserRes> register(@Body User user);

 

 

- UserRes

package com.~.memo.model;

public class UserRes {

    public String result;
    public String accessToken;
}