본문 바로가기
안드로이드

[안드로이드/JAVA] Rest API GET, POST 알아보기

by krapoi 2022. 3. 2.
반응형

***

코틀린 버전 및 더 자세한 설명으로 다시 포스팅했습니다. 2022/8/23

https://krapoi.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CKotlin-Retrofit2-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

[안드로이드/Kotlin] Retrofit2 사용하기

내가 2022년 3월 달에 Get, Post에 대해서 올렸었는데, 내용이 한참 부실했기 때문에 다시 정리해 본다. 전에 올린 포스팅은 링크를 올려두겠다. https://krapoi.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%E..

krapoi.tistory.com

 

 

내가 이번에 앱을 만들면서 서버와 연동을 하게 되었는데 REST API로 만들었다고 한다.

그래서 어떻게 연결하나 찾아보면서 공부했는데

생각보다 어려웠다.

 

 

Manifest

일단 먼저

Manifest에

 <uses-permission android:name="android.permission.INTERNET" />

 

를 추가하고

 

Manifest에 application에

 android:usesCleartextTraffic="true"

를 추가해 준다.

 

Get

먼저 Get을 알아보자.

내가 사용한 방법은 Retrofit이다.

 

먼저 모델을 설정해 줘야 한다.

 

내가 만든 로그인 시스템으로 예를 들겠다.

public class LoginResult {
    private boolean success;

    private int code;

    private String msg;

    private String data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

나는 이런 식으로 만들어 주었다.

 

모델 클래스를 다 만든 다음,

 

LoginActivity 클래스에 인터페이스를 선언해준다.

 

 public interface Service{
        @GET("/api/v1/suggestion/get/{suggestionId}")
        Call<RoginResult> get(@Field("Token") String token);
    }

    static class RetrofitServiceImplFactory{
        private static Retrofit getretrofit(){
            return new Retrofit.Builder()
                    .baseUrl("https://f93e-58-238-74-139.ngrok.io/")
                    .addConverterFactory(GsonConverterFactory.create()).build();
        }

        public static LoginResultActivity.Service Post(){
            return getretrofit().create(Service.class);
        }
    }

이런 식으로.

 

사용할 때에는

RetrofitService retrofitService = RetrofitServiceeBuilder.retrofit.create(RetrofitService.class);
		
                    Call<LoginResult> call = retrofitService.getResults("1"); 
                    call.enqueue(new Callback<Device>() {
                        @Override
                        public void onResponse(Call<LoginResult> call, Response<Result> response) {
                                if (response.isSuccessful()) {
                                    Result result = response.body();
                                    System.out.println("성공")
                                } else {
                                    System.out.println("실패")
                                }
                            
                        }
                        @Override
                        public void onFailure(Call<Device> call, Throwable t) {
                          System.out.println("통신 실패" + t.getMessage) 
                        }
                    });

이런 식으로 사용하면 된다.

 

Post

포스트도 비슷한 방식으로 사용하면 된다.

 

먼저 모듈을 만들어준다.

 

public class WriteResult {
    private String title;

    private String content;

    private String writerId;


}

 

그다음 클래스 내에서 인터페이스를 구현해 준다.

 

public interface Service{
        @FormUrlEncoded
        @POST("/api/v1/suggestion/add-suggestion")
        Call<WriteResult> setPost(@Field("title") String title
                , @Field("content") String content
                , @Field("writerId") String writerId);

        @GET("/api/v1/user")
        Call<UserGet> user(@Field("Token") String Token);

    }

    static class RetrofitServiceImplFactory{
        private static Retrofit getretrofit(){
            return new Retrofit.Builder()
                    .baseUrl("https://f93e-58-238-74-139.ngrok.io/")
                    .addConverterFactory(GsonConverterFactory.create()).build();
        }

        public static WriteActivity.Service Post(){
            return getretrofit().create(Service.class);
        }

 

사용할 때에는

 

Call<WriteResult> call = WriteActivity.RetrofitServiceImplFactory.Post().setPost(Title,Content,MainActivity.Id);

                call.enqueue(new Callback<WriteResult>() {
                    @Override
                    public void onResponse(Call<WriteResult> call, Response<WriteResult> response) {
                        if(response.isSuccessful()){
                            Log.d("성공","성공입니당");
                            LoginResultActivity.iscreated = true;
                            startActivity(i);
                            finish();
                        }else {
                            Toast.makeText(getApplicationContext(), "알 수 없는 오류", Toast.LENGTH_SHORT).show();
                            Log.d("실패", "실패");
                        }
                    }

                    @Override
                    public void onFailure(Call<WriteResult> call, Throwable t) {
						//...
                    }

이런 식으로 사용하면 된다.

 

나는 Retrofit을 사용하였지만 Retrofit 말고도 많은 통신방식이 있으니 알아보고 싶으면 찾아보길 바란다.

반응형