플랫폼/안드로이드 android

안드로이드 retrofit 2 사용법 / 예제 , 레트로핏 2, Java

삐뚤어진 개발자 2022. 5. 17.

안드로이드 retrofit2 사용법

먼저 이 포스팅에 오신분들은 레트로핏이 뭔지 대충 알고 오신분들이라 생각하여 간단한 소개만 하고 간단한 예제 코드만 작성해보겠습니다.

 

아래의 링크에 가시면 더 자세한 사용법을 보실수 있습니다.

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

 

 

Retrofit은 http 통신을 사용할때 쉽게 사용할 수 있는 라이브러리입니다.

안드로이드에서 api 서버와 통신을 할때 주로 쓰이고, 성능도 좋아서 현업에서 쓰입니다.

 

먼저 api서버에서 가져 온다는 가정하에 만들어보겠습니다.

아래의 api 결과 값을 받아서 텍스트뷰에 뿌려보겠습니다.

(참고로 저는 Java를 사용했습니다.)

 

https://jsonplaceholder.typicode.com/posts

 

결과

결과적으로 테스트 코드가 어떻게 작동되는지 결과부터 보여드리겠습니다.

 

먼저 아래의 url의 반환값을 textView에 넣어주는 간단한 예제입니다.

https://jsonplaceholder.typicode.com/posts/5

 

 

준비작업

1. manifest 인터넷 퍼미션 추가

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

 

2. gradle 추가

    // retrofit2
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    // Gson 변환기
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

위의 gradle을 추가해줍니다.

Gson은 api 리턴값이 json으로 오기 때문에 파싱하기 쉽도록 추가하여 사용해준 것입니다.

 

 

코드 작성

먼저 새로 만들 클래스는 3개입니다.

[2]의 인터페이스 클래스에서 요청시 보내는 값을 변수로 추가해놓았는데

 

이 예제에서는 파라미터 추가없이 요청할 것이기 때문에 필요없는 항목입니다.

파라미터를 추가하려면 인터페이스에서 추가해서 호출하면 됩니다.

https://jsonplaceholder.typicode.com/posts

 

[1]

retrofit_client.Java

public class retrofit_client {
    private static final String BASE_URL = "https://jsonplaceholder.typicode.com/";


    public static Retrofit_interface getApiService(){return getInstance().create(Retrofit_interface.class);}

    private static Retrofit getInstance(){
        Gson gson = new GsonBuilder().setLenient().create();
        return new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
    }

}

[2]

Retrofit_interface.Java

public interface Retrofit_interface {

    @GET("posts/{UserID}")
    Call<data_model> test_api_get(
            @Path("UserID") String userid);
}

[3]

data_model.java

public class data_model {
    @SerializedName("userId")
    @Expose
    private String userId;

    @SerializedName("id")
    @Expose
    private String id;

    @SerializedName("title")
    @Expose
    private String title;

    @SerializedName("body")
    @Expose
    private String body;


    public String getUserId(){
        return userId;
    }

    public String getID(){
        return id;
    }

    public String getTitle(){
        return title;
    }

    public String getBody(){
        return body;
    }
}

 

 

호출

이제 메인 엑티비티에서 호출하여 텍스트 뷰에 넣는 과정입니다.

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    Call<data_model> call;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        textView =findViewById(R.id.txt_view);

        call = retrofit_client.getApiService().test_api_get("5");
        call.enqueue(new Callback<data_model>(){
            //콜백 받는 부분
            @Override
            public void onResponse(Call<data_model> call, Response<data_model> response) {
                data_model result = response.body();
                String str;
                str= result.getUserId() +"\n"+
                        result.getID()+"\n"+
                        result.getTitle()+"\n"+
                        result.getBody();
                textView.setText(str);
            }

            @Override
            public void onFailure(Call<data_model> call, Throwable t) {

            }
        });


    }
}

 

 

 

결과

 

긴글 읽어 주셔서 감사합니다.

더 궁금하신 사항은 댓글로 문의해주시면 빠르게 답변드리겠습니다.

 

 

댓글