레트로핏 사용.(java)


안드로이드 프로젝트 생성.


gradle dependencies setting.


app gradle.


dependencies {


    // 인터넷 연결 http 프로토콜

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

    // okhttp 를 포함하고 있다.

    implementation 'com.squareup.retrofit2:retrofit:2.5.0'


    // https://github.com/square/retrofit/tree/master/retrofit-converters/gson

    // gson 라이브러리를 포함하고 있다.

    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'


    // http 통신시 로그 보기위한 것.

    // https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

    // okhttp 를 포함하고 있다.

    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'



}

레트로핏을 사용할 기본 조건은 되었고.

레트로핏으로 통신을 할수있는 인터페이스 연결할 클래스 생성.

레트로핏은 http api를 인터페이스 형태로 사용한다.



public class GithubUser {



    private String login;

    private String url;

    private String name;

    private String location;

    private String repos_url;


    public String getLogin() {

        return login;

    }


    public void setLogin(String login) {

        this.login = login;

    }


    public String getUrl() {

        return url;

    }


    public void setUrl(String url) {

        this.url = url;

    }


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }


    public String getLocation() {

        return location;

    }


    public void setLocation(String location) {

        this.location = location;

    }


    public String getRepos_url() {

        return repos_url;

    }


    public void setRepos_url(String repos_url) {

        this.repos_url = repos_url;

    }


    @Override

    public String toString() {

        return "login :" + login + ", url :" + url + ", name :" + name + ", location : " + location + ", repos_url :" + repos_url;

    }

}




public class GithubUserRepository {


    private String name;

    private String html_url;

    private String language;


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }


    public String getHtml_url() {

        return html_url;

    }


    public void setHtml_url(String html_url) {

        this.html_url = html_url;

    }


    public String getLanguage() {

        return language;

    }


    public void setLanguage(String language) {

        this.language = language;

    }



    @Override

    public String toString() {

        return "name : " + name + ", html_url : " + html_url + ", language : " + language;

    }

}





public interface GithubService {


    @GET("users/{user}")

    Call<GithubUser> getGithubUser(@Path("user") String userName);


    @GET("users/{user}/repos")

    Call<List<GithubUserRepository>> getGithubUserRepository(@Path("user") String userName);

}




ApiConnection 클래스 생성.

실제 통신을 담당할 retrofit 객체를 생성한다.


public class ApiConnection {


    private Retrofit retrofit;


    private final String baseUrl = "https://api.github.com";


    /**

     * 생성자.

     */

    private ApiConnection() {


        OkHttpClient httpClient = new OkHttpClient.Builder()

                .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))

                .build();


        this.retrofit = new Retrofit.Builder()

                .baseUrl(baseUrl)

                // 내려받는 데이터를 gson 형식으로 데이터 변환

                .addConverterFactory(GsonConverterFactory.create())

                .client(httpClient)

                .build();

    }

        /**

     * 2. 싱글턴 패턴 구현.

     */

    private static final ApiConnection INSTANCE = new ApiConnection();


    public static ApiConnection getInstance() {

        return INSTANCE;

    }


    /**

     * interface  리턴.

     */

    public GithubService getRetrofitService() {

        return retrofit.create(GithubService.class);

    }

}





    MainActivity 에서


    void connection_01() {


        Call<GithubUser> result = ApiConnection.getInstance().getRetrofitService().getGithubUser("bearkinf");


        result.enqueue(new Callback<GithubUser>() {

            @Override

            public void onResponse(Call<GithubUser> call, Response<GithubUser> response) {


                Log.w("LOG","GithubUser : " + response.body());

            }


            @Override

            public void onFailure(Call<GithubUser> call, Throwable t) {


            }

        });

    }



oncreate()에서 함수를 호출하면 깃허브에서 내용을 가져온다.






레트로핏을 이용한 통신 프로젝트에 RxJava 넣기..



라이브러리 추가.



dependencies {

    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation 'com.android.support:appcompat-v7:28.0.0'

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

    implementation 'com.android.support:support-v4:28.0.0'

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'


    //로그켓 .

    implementation 'com.github.bearkinf:AndroidLogPrintUtil_Java:1.1.1'


    // 인터페이스를 통해 인터넷 연결을 가지고 있다.

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

    implementation 'com.squareup.retrofit2:retrofit:2.5.0'

    // https://github.com/square/retrofit/tree/master/retrofit-converters/gson

    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

    // http 통신시 로그 보기위한 것.

    // https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'


    // Rxjava 타입을 지원한다.

    // https://github.com/square/retrofit/tree/master/retrofit-adapters/rxjava2

    // 자체적으로 RxJava 라이브러리를 가지고 있다.(최신 버전은 아님.)

    // adapter-rxjava2 내부적으로 rxjava를 참조하나, 버그가 수정된 최신버전의 rxjava를 명확히 정의하여 해당 library를 사용하게 하도록한다.

    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'


    // https://github.com/ReactiveX/RxJava

    // 각각의 라이브러리가 RxJava를 참조하나 최신 라이브러리를 지정한다.

    // rxandroid 내부적으로 rxjava를 참조하나, 버그가 수정된 최신버전의 rxjava를 명확히 정의하여 해당 library를 사용하게 하도록한다.

    implementation "io.reactivex.rxjava2:rxjava:2.2.6"

    // https://github.com/ReactiveX/RxAndroid 스케줄러 관리 (쓰레드 관리

    // 자체적으로 RxJava 라이브러리를 가지고 있다.(최신 버전은 아님.)

    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'


}




레트로핏 인터페이스에 RxJava 추가.

public interface GithubService {


    @GET("users/{user}")

    Call<GithubUser> getGithubUser(@Path("user") String userName);



    @GET("users/{user}/repos")

    Call<List<GithubUserRepository>> getGithubUserRepository(@Path("user") String userName);



    //RxJava 용 .Observable

    @GET("users/{user}")

    Observable<GithubUser> getGithubUser2(@Path("user") String userName);



    @GET("users/{user}/repos")

    Flowable<List<GithubUserRepository>> getGithubUserRepository2(@Path("user") String userName);


}



레트로핏 객체에 RxJava 를 사용하기 위해 아답터 추가.


public class ApiConnection {


    private Retrofit retrofit;


    private final String baseUrl = "https://api.github.com";


    /**

     * 생성자.

     */

    private ApiConnection() {


        OkHttpClient httpClient = new OkHttpClient.Builder()

                .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))

                .build();


        this.retrofit = new Retrofit.Builder()

                .baseUrl(baseUrl)

                // 내려받는 데이터를 gson 형식으로 데이터 변환

                .addConverterFactory(GsonConverterFactory.create())

                // RxJava 를 사용하게되면 해당 아답터팩토리를 등록해야 한다.

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())


                .client(httpClient)

                .build();

    }

        /**

     * 2. 싱글턴 패턴 구현.

     */

    private static final ApiConnection INSTANCE = new ApiConnection();


    public static ApiConnection getInstance() {

        return INSTANCE;

    }


    /**

     * interface  리턴.

     */

    public GithubService getRetrofitService() {

        return retrofit.create(GithubService.class);

    }

}


MainActivity에서 RxJava를 이용한 레트로핏 통신 코드 넣기.



    void connection_03() {


        /**

         * 람다식으로 사용을하려면 .

         *   compileOptions {

         *         sourceCompatibility JavaVersion.VERSION_1_8

         *         targetCompatibility JavaVersion.VERSION_1_8

         *   }

         *   넣어 주어야 한다.

         */

        LogPrintUtil.w("connection_03 start");

        ApiConnection.getInstance().getRetrofitService()

                .getGithubUser2("bearkinf")

                .subscribeOn(Schedulers.io())

                .observeOn(AndroidSchedulers.mainThread())

                .subscribe(githubUser -> {

                            LogPrintUtil.w("Observable    Data :" + githubUser);

                        }, throwable -> {


                        }

                );

    }


oncreate()에서 함수를 호출하면 깃허브에서 내용을 가져온다.




코틀린 버전은 코틀린 탭에서. 다시 작성.





코틀린 프로잭트 생성.


레트로핏 인터페이스 생성.

interface GithubService {



    @GET("users/{user}")

    fun getGithubUser(@Path("user") userName: String): Call<GithubUser>



    @GET("users/{user}/repos")

    fun getgithubUserRepository(@Path("user") userName: String): Observable<List<GithubUserRepository>>


}


레트로핏 객체 클래스 생성.

/**스테틱 클래스 생성.*/

object ApiConnection {


    private val BASE_URL = "https://api.gitHub.com"


    private val retrofit by lazy {

        val httpClient = OkHttpClient.Builder()

            .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))

            .build()


        Retrofit.Builder()

            .baseUrl(BASE_URL)

            .addConverterFactory(GsonConverterFactory.create())

            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

            .client(httpClient)

            .build()

    }

    val getRetrofitService = retrofit.create(GithubService::class.java)

}


MainActivity 에서 oncreate 에 함수 적용.

    private fun retrofitConnection_01() {


        val getGithubUser = ApiConnection.getRetrofitService.getGithubUser("bearkinf")


        getGithubUser.enqueue(object : Callback<GithubUser> {


            override fun onFailure(call: Call<GithubUser>, t: Throwable) {

            }


            override fun onResponse(call: Call<GithubUser>, response: Response<GithubUser>) {


                LogPrintUtil.w("response : ${response.body()}")


            }

        })

    }


    private fun retrofitConnection_02() {



        ApiConnection.getRetrofitService

            .getgithubUserRepository("bearkinf")

            .subscribeOn(Schedulers.io())

            .observeOn(AndroidSchedulers.mainThread())


            .subscribe({


                LogPrintUtil.w("RxJava : $it")


            }, {


            })



    }





'Kotlin > study' 카테고리의 다른 글

isNullOrBlank or isNullOrEmpty  (0) 2018.11.19
코틀린 클래스.  (0) 2018.10.04
코틀린 apply,let 함수  (0) 2018.08.24

+ Recent posts