1. 준비사항

 

라이브러리 추가 (build.gradle.kts (module :app))

Retrofit

Gson

implementation ("com.squareup.retrofit2:retrofit:2.10.0")
implementation ("com.squareup.retrofit2:converter-gson:2.10.0")

 

인터넷 권한주기(manifast)

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

 

사용된 파일

MainActivity //액티비티
GithubService //코틀린파일 //network 패키지에 생성
Repo //데이터 클래스(data class) //model 패키지에 생성

 

2. 코드

1) MainActivity

package com.example.gitapi

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.example.gitapi.model.Repo
import com.example.gitapi.network.GithubService
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

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

        val githubService = retrofit.create(GithubService::class.java)
        githubService.listRepos("chaesoobum").enqueue(object : Callback<List<Repo>> {
            override fun onResponse(p0: Call<List<Repo>>, p1: Response<List<Repo>>) {
                Log.e("Main(call)", p0.toString())
                Log.e("Main(response)", p1.body().toString())
            }

            override fun onFailure(p0: Call<List<Repo>>, p1: Throwable) {

            }


        })


    }
}

 

"chaesoobum"은 내 깃허브 유저명

 

2) GithubService

package com.example.gitapi.network

import com.example.gitapi.model.Repo
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Path

interface GithubService {
    //get으로 요청보내고 응답의형태는 리스트이고 repo에 저장
    @GET("/users/{username}/repos")
    fun listRepos(@Path("username") username: String): Call<List<Repo>>
}

 

3) Repo

 

package com.example.gitapi.model

import com.google.gson.annotations.SerializedName

data class Repo (

    @SerializedName("id")
    val id: Long,

    @SerializedName("name")
    val name: String,

    @SerializedName("description")
    val description: String,

    @SerializedName("language")
    val language: String?,

    @SerializedName("stargazers_count")
    val starCount: Int,

    @SerializedName("forks_count")
    val forksCount: Int,

    @SerializedName("html_url")
    val htmlUrl: String,


)

 

3. 결과 (메인액티비티의 로그, 로그캣에서 확인가능)

 

2024-03-29 00:19:11.231  8066-8066  Main(call)     com.example.gitapi     E  retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall@ae21133
2024-03-29 00:19:11.231  8066-8066  Main(response) com.example.gitapi     E  [Repo(id=630767367, name=anyang_setup, description=null, language=Java, starCount=0, forksCount=0, htmlUrl=https://github.com/chaesoobum/anyang_setup), ....

 

4. 결과와 동작순서

git api로 보낸 요청과 api에서 받은 응답이 표시된다 응답에는 "chaesoobum" 유저의 레포지토리의 id,name,description, languae, stargazers_count, forks_count, html이 순서대로 나온다

 

동작순서는 처음에 메인액티비티에서 Retrofit 객체를 베이스url이 "https://api.github.com/" 인상태로 생성한다

 

이후에 Retrofit을 사용하여 GithubService 인터페이스의 인스턴스를 생성한다

 

GithubService에서는 Get 어노테이션을 사용하여 요청을 보내고 fun listrepo 를통해 결과를 Repo 데이터클래스에 저장한다

 

요청에는 로그의 정보보다 더많은 정보가 들어있다 나는 그중에 일부만 Repo 데이터 클래스에 저장하였다

 

저장한내용을 로그로 보여주는것이다