앞선 포스팅으로 환경설정이 끝났다면
https://cong-s.tistory.com/259
Android Studio - retrofit 환경설정
Volley 와 같이 안드로이드에서 네트워크를 사용할 때 사용하는 라이브러리 중 retrofit을 설치할 때 환경설정에 대해 알아보자. 1. build.gradle 에 라이브러리 설치. dependencies { implementation 'com.square..
cong-s.tistory.com
이제 API 를 사용하기 위해 몇가지 준비를 더 해야한다.
1. POST로 API를 사용하기 위해 다음과 같이 인터페이스를 만든다.
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface UserApi {
@POST("/users/register")
Call<RegisterRes> register(@Body User user);
}
2. 회원가입을 예시로 들었기 때문에 해당 API가 응답하여 반환하는 JSON 데이터의 구조에 맞게 클래스를 만든다.
public class RegisterRes implements Serializable {
private String result;
private String access_token;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
}
3. 데이터의 타입과 생성자, 메소드를 관리할 클래스를 만들어준다.
public class User implements Serializable {
private String email;
private String password;
private String nickname;
public User(String email, String password, String nickname) {
this.email = email;
this.password = password;
this.nickname = nickname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
4. 이제 액티비티에서 입력된 데이터로 API를 통해 네트워크에 요청하고 응답하여 돌아온 데이터를 다시 저장하는 등
작업을 이어나가면 된다.
예시로 에디트 텍스트로 입력된 데이터를 미리 만들어둔 회원가입 API 에 전송해 조건에 맞는 경우,
정상적으로 회원가입이 완료되고, 데이터베이스에 데이터를 추가한 다음, 액세스 토큰 값을 반환하도록 하였다.
아래는 액티비티 코드이다.
public class RegisterActivity extends AppCompatActivity {
EditText editEmail;
EditText editPassword;
EditText editNickname;
Button btnRegister;
// 네트워크 처리 보여주는 프로그레스 다이얼로그
ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
editEmail = findViewById(R.id.editEmail);
editPassword = findViewById(R.id.editPassword);
editNickname = findViewById(R.id.editNickname);
btnRegister = findViewById(R.id.btnRegister);
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 이메일 가져온다. 이메일 형식체크
String email = editEmail.getText().toString().trim();
Pattern pattern = Patterns.EMAIL_ADDRESS;
if(pattern.matcher(email).matches() == false){
Toast.makeText(RegisterActivity.this, "이메일 형식이 올바르지 않습니다.", Toast.LENGTH_SHORT).show();
return;
}
// 비밀번호 가져온다.
String password = editPassword.getText().toString().trim();
// 비번 길이 체크
if(password.length() < 4 || password.length() > 12){
Toast.makeText(RegisterActivity.this, "비번길이는 4자이상 12자이하로 만들어 주세요.", Toast.LENGTH_SHORT).show();
return;
}
// 닉네임을 가져와서, 빈 문자열인지만 체크
String nickname = editNickname.getText().toString().trim();
if(nickname.isEmpty()){
Toast.makeText(RegisterActivity.this, "닉네임 입력하세요.", Toast.LENGTH_SHORT).show();
return;
}
// 이 데이터를 API로 호출!!
// 네트워크 통해서 데이터를 보내고 있다는,
// 프로그레스 다이얼로그를 먼저 띄운다.
showProgress(getString(R.string.dialog_register));
Retrofit retrofit =
NetworkClient.getRetrofitClient(RegisterActivity.this);
UserApi api = retrofit.create(UserApi.class);
User user = new User(email, password, nickname);
Call<RegisterRes> call = api.register(user);
call.enqueue(new Callback<RegisterRes>() {
@Override
public void onResponse(Call<RegisterRes> call, Response<RegisterRes> response) {
dismissProgress();
// 200 OK 일때,
if(response.isSuccessful()){
RegisterRes registerRes = response.body();
// 억세스토큰은, 이제 앱에서, api 호출할때마다 헤더에 넣어서 보내야한다.
// 따라서 억세스토큰은, 쉐어드프리퍼런스에 저장해 놓는다.
SharedPreferences sp =
getApplication().getSharedPreferences(Config.PREFERENCES_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("accessToken", registerRes.getAccess_token());
editor.apply();
finish();
} else if (response.code() == 400){
} else {
Toast.makeText(RegisterActivity.this, "에러발생 : "+response.code(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<RegisterRes> call, Throwable t) {
// 네트워크 자체 문제로 실패!
dismissProgress();
}
});
}
});
}
void showProgress(String message){
dialog = new ProgressDialog(this);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage(message);
dialog.show();
}
void dismissProgress(){
dialog.dismiss();
}
}
'Android' 카테고리의 다른 글
Android Studio - Retrofit 에서 Multi form으로 데이터를 보내는 방법 (0) | 2022.07.26 |
---|---|
Android Studio - (gradle) AndroidX 에러 해결 (0) | 2022.07.25 |
Android Studio - Retrofit 라이브러리를 사용하기 위한 환경설정 (0) | 2022.07.21 |
Android Studio - 기기의 카메라 / 앨범 사용하기 (0) | 2022.07.21 |
Android Studio - Recyclerview 페이징 처리 (0) | 2022.07.20 |
댓글