Retrofit2 와 okHttp를 사용하여 통신을해보자

2019. 1. 31. 21:50기타

안녕하세요 오늘은 Retrofit2와 okHttp를 이용해서 저의 gitHub의 repo를 가져오는 통신을 해보려고합니다.


result 값은 okHttp와 logging interceptor를 사용하여 찍어보도록하겠습니다.


App수준의 build.gradle의 dependencies{ } 안에 아래 코드를 넣어주도록합니다.


implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'


 그 다음 AndroidManifest에 Internet 사용을 위한 permission을 받습니다.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.retrofit2ex">

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

</manifest>


1. Intrerface class를 생성합니다


public interface GitHubService {

@GET("/users/{user}/repos")
Call<List<JsonObject>> getMyRepos(@Path("user") String userName);

}


2. httpLoggingInterceptor() 메소드를 


private HttpLoggingInterceptor httpLoggingInterceptor(){

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
android.util.Log.e("MyGitHubData :", message + "");
}
});

return interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
}


3. addInterceptor()의 파라미터에서 호출해줍니다.


OkHttpClient client = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor()).build();


4. Interface class를 구현해줍니다.


Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(client)
.addConverterFactory(GsonConverterFactory.create()).build();

GitHubService gitHubService = retrofit.create(GitHubService.class);


아래는 MainActivity 코드입니다.


public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor()).build();

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(client)
.addConverterFactory(GsonConverterFactory.create()).build();

GitHubService gitHubService = retrofit.create(GitHubService.class);

gitHubService.getMyRepos("userName").enqueue(new Callback<List<JsonObject>>() {
@Override
public void onResponse(Call<List<JsonObject>> call, Response<List<JsonObject>> response) {

}

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

}
});
}

private HttpLoggingInterceptor httpLoggingInterceptor(){

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
android.util.Log.e("MyGitHubData :", message + "");
}
});

return interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
}
}


이렇게 통신을 하게되면 모든 결과를 로그를 통해 확인할 수 있습니다.