-안드로이드 스튜디오 서버에 값을 받아올 때 레트로핏을 사용한다 -> retrofit
아래 코드는 버튼 클릭 시 이벤트 발생으로
받아온 토큰이 있는 지 확인 후
토큰을 없애고 로그아웃을 하는 코드이다 여기서 봐야할 것은
레트로 핏으로 서버와 연결 하는 것이다 .
레트로핏 공식 문서
https://velog.io/@duckchanahn/Android-Studio-Retrofit2-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
버튼 클릭 시 이벤트 발생하며 레트로핏에 연결하는 코드
informationbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences sp = getSharedPreferences(Utils.PREFERENCES_NAME, MODE_PRIVATE);
accessToken = sp.getString("accessToken", "");
if(accessToken.isEmpty()){
// 로그인 액티비티를 띄운다.
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}else{
showProgress("내 정보 가져오는 중 입니다....");
Retrofit retrofit = NetworkClient.getRetrofitClient(MainActivity.this);
ImageApi api = retrofit.create(ImageApi.class);
Call<UserInfoRes> call = api.UserInfo("Bearer "+ accessToken);
Log.i("MyMemoApp", "2222");
call.enqueue(new Callback<UserInfoRes>() {
@Override
public void onResponse(Call<UserInfoRes> call, Response<UserInfoRes> response) {
dismissProgress();
if(response.isSuccessful()){
// 200 OK 인 경우
// 정상 저장되었으면, 이 액티비티는 끝낸다.
User_email = response.body().getUser_email();
User_nickname =response.body().getUser_nickname();
Intent intent = new Intent(MainActivity.this, UserActivity.class);
intent.putExtra("User_email",User_email);
intent.putExtra("User_nickname",User_nickname);
startActivity(intent);
finish();
}else{
Toast.makeText(MainActivity.this,
"죄송합니다 현재 이용 불가 합니다 ㅠㅠ",
Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void onFailure(Call<UserInfoRes> call, Throwable t) {
dismissProgress();
Toast.makeText(MainActivity.this,
"죄송합니다 현재 이용 불가 합니다 ㅠ",
Toast.LENGTH_SHORT).show();
return;
}
});
}
}
});
---------------------------------------------레트로핏 get 코드 (클래스)-------------------------------------------------
Retrofit retrofit = NetworkClient.getRetrofitClient(MainActivity.this);
ImageApi api = retrofit.create(ImageApi.class);
Call<UserInfoRes> call = api.UserInfo("Bearer "+ accessToken);
Log.i("MyMemoApp", "2222");
call.enqueue(new Callback<UserInfoRes>() {
@Override
public void onResponse(Call<UserInfoRes> call, Response<UserInfoRes> response) {
dismissProgress();
if(response.isSuccessful()){
// 200 OK 인 경우
// 정상 저장되었으면, 이 액티비티는 끝낸다.
User_email = response.body().getUser_email();
User_nickname =response.body().getUser_nickname();
Intent intent = new Intent(MainActivity.this, UserActivity.class);
intent.putExtra("User_email",User_email);
intent.putExtra("User_nickname",User_nickname);
startActivity(intent);
finish();
}else{
Toast.makeText(MainActivity.this,
"죄송합니다 현재 이용 불가 합니다 ㅠㅠ",
Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void onFailure(Call<UserInfoRes> call, Throwable t) {
dismissProgress();
Toast.makeText(MainActivity.this,
"죄송합니다 현재 이용 불가 합니다 ㅠ",
Toast.LENGTH_SHORT).show();
return;
}
});
-------------------------------------------------UserAPI(인터페이스)----------------------------------------------------------
public interface UserApi {
// 로그인 API
@POST("/dev/api/v1/user/login")
Call<UserRes> userLogin(@Body UserReq userReq);
// 로그아웃 API
@POST("/dev/api/v1/user/logout")
Call<UserRes> userLogout(@Header("Authorization") String accessToken);
// 회원가입 API
@POST("/dev/api/v1/user/login")
Call<UserRes> userSignUp(@Body UserReq userReq);
}
----------------------------------------------UserInfoReq(클래스) --------------------------------------------------
public class UserInfoReq {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
-----------------------------------------------UserInfoRes(클래스)-----------------------------------------------------
이부분에서 getter/setter로 받아올 때
return 값으로는 서버에서 보내는
return 값과 같이 써야지 값이 똑바로 올 수 있다.
이부분이 맞지 않으면 null 값 또는 오류가 발생할 확률이 높다.
public class UserInfoRes {
private String user_email;
private String user_nickname;
private String error;
public String getUser_email() {
return user_email;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
public String getUser_nickname() {
return user_nickname;
}
public void setUser_nickname(String user_nickname) {
this.user_nickname = user_nickname;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
------------------------------------------------NetworkClient(클래스)---------------------------------------------------------
import android.content.Context;
import com.jhn.googlemaptest.utils.Utils;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class NetworkClient {
public static Retrofit retrofit;
public static Retrofit getRetrofitClient(Context context){
if(retrofit == null){
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.addInterceptor(loggingInterceptor).build();
retrofit = new Retrofit.Builder().baseUrl("Lamda 주소 ")
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
'프론트엔드 > 안드로이드 스튜디오' 카테고리의 다른 글
안드로이드 스튜디오 : xml 선 그리기 / xml 선 긋기 / 레이아웃 선긋기/ 레이아웃 선 (0) | 2022.03.28 |
---|---|
안드로이드 스튜디오 : dialog 만들기 / 커스텀 dialog / 원하는대로 다이얼로그 만들기 (0) | 2022.03.28 |
안드로이드 스튜디오 : 체크박스 만들기 / 체크박스 사용하기 (0) | 2022.03.23 |
안드로이드 스튜디오 : 다이얼 그램 다른 페이지 열기 / Intent 값을 보내 다른 페이지 열기 (0) | 2022.03.23 |
안드로이드 스튜디오 : 두 날짜간의 차 빼기 / 더하기/Incompatible types. Found: 'long', required: 'java.lang.String' (0) | 2022.03.23 |