반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • xcode
    • reduce
    • 공부
    • IT
    • JSP
    • 예제
    • kotlin
    • 프로그래머스
    • Android
    • ios
    • 구축
    • 타입
    • 개발
    • level1
    • map
    • 프로그래밍
    • 코딩테스트
    • swfit
    • swift
    • Java

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    [Kotlin] retrofit2 간단한 사용법
    IDE & Framework/Android

    [Kotlin] retrofit2 간단한 사용법

    2021. 10. 17. 20:12
    반응형

    app단위 build.gradle에 추가

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

     

    인터넷 사용 퍼미션 허용(https)

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

    http에 접근하려면 추가로 설정을 해주어야 합니다!

     

     

    DTO

    data class Contract(
        @SerializedName("pName") var name: String,
        @SerializedName("pPhoneNumber") var phoneNumber: String,
        @SerializedName("pImagePath") var imagePath: String,
        @SerializedName("pEmail") var email: String,
        @SerializedName("pResidence") var residence: String,
        @SerializedName("pMemo") var memo: String,
        @SerializedName("pUpdateDate") var updateDate: String
    )

    응답을 받을때, @SerializedName annotation내부의 문자열을 찾아 응답값을 자동으로 객체에 주입합니다.

     

     

    Retrofit 객체 초기화

    class RetrofitManager {
    
        companion object{
            val retrofit = Retrofit.Builder()
                .baseUrl("https://sheltered-tundra-79773.herokuapp.com")
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        }
    
    }

    ConverterFactory또한 종류가 어려가지이니, 필요에 따라 찾아 추가하시면 되겠습니다.

    위에서 아래로 채에 거르듯 참조하게 되며, GsonConverter의 경우 변환이 불가해도 변환했다고 한다고 하니,

    가장 하위레벨(하단)에 위치시키면 되겠습니다.

     

     

    사용할 REST 타입과 정보를 인터페이스로 구축

    interface RetrofitService {
    
        @FormUrlEncoded
        @POST("/download")
        fun getAllContract(
            @Field("device_data") phoneNo: String
        ) : Call<Contract>
    
        @FormUrlEncoded
        @POST("/backup")
        fun putSomeContract(
            @Field("person") person: String,
        ) : Call<String>
    }

    어노테이션(@)을 이용해 다양한 정보를 명시할 수 있습니다.

    @FormUrlEndoded는 @Field 어노테이션을 사용해 값을 전송할때 필수적으로 입력해야하는 annotation이며,

    @POST는 http method중 post요청을 하겠다는 뜻입니다. 

    http metohd는 모두 annotation으로 요청할 수 있으니 다른 방식으로 얼마든지 요청할 수 있습니다.

    매개변수에도 다양한 annotation을 사용할 수 있으니 필요에 따라 추가로 찾아 사용하시면 됩니다.

     

     

    Retrofit객체 생성 및 뷰바인딩

    class MainActivity : AppCompatActivity() {
    
        val TAG: String = "MainActivity"
        lateinit var binding: ActivityMainBinding
        lateinit var service: RetrofitService
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            binding = ActivityMainBinding.inflate(layoutInflater)
            val view = binding.root
            setContentView(view)
    
            service = RetrofitManager.retrofit.create(RetrofitService::class.java)
    
            binding.get.setOnClickListener {
                getContract()
            }
    
            binding.put.setOnClickListener {
                putContract()
            }
        }

    FindByViewId 사용을 하지 않으려고 ViewBinding만 적용하였습니다.

     

     

    selectAll

    private fun getContract(){
    
            var jsonObject = JSONObject()
            jsonObject.put("phone", "01011112222")
            var phone = jsonObject.toString()
    
            service.getAllContract(phone).enqueue(object: Callback<Contract>{
                override fun onResponse(call: Call<Contract>, response: Response<Contract>) {
                    if(response.isSuccessful.not()){
                        return
                    }
                    response.body()?.let {
                        Log.d(TAG, "\n${it.toString()}")
                    }
                }
    
                override fun onFailure(call: Call<Contract>, t: Throwable) {
                    Log.d(TAG, "[Fail]${t.toString()}")
                }
    
            })
        }

    연락처 정보를 json으로 parsing하여 request요청을 보냅니다.

    결과값을 로그로 출력해줍니다.

     

     

     

    put extra data

    private fun putContract(){
    
            var contractZip = JSONObject()
            var contracts = JSONArray()
            var contract = JSONObject()
    
            contract.put("pName", "retrofit")
            contract.put("pPhoneNumber", "01011112222")
            contract.put("pUpdateDate", "2021-10-12")
    
            contracts.put(contract)
            contractZip.put("person", contracts)
            contractZip.put("phone", "01033334444")
            var person = contractZip.toString()
    
            service.putSomeContract(person).enqueue(object: Callback<String>{
                override fun onResponse(call: Call<String>, response: Response<String>) {
                    if(response.isSuccessful.not()){
                        return
                    }
                    response.body()?.let {
                        Log.d(TAG, "\n${it.toString()}")
                    }
                }
    
                override fun onFailure(call: Call<String>, t: Throwable) {
                    Log.d(TAG, "[Fail]${t.toString()}")
                }
    
            })
        }

    JsonArray에 다수의 JsonObject를 입력하고,

    이를 JosnObject에 입력하여 request를 하는 코드입니다.

    마찬가지로 결과값을 로그로 출력합니다.

     

     

     

     

     

     

     

     

     

     

    반응형
    저작자표시 비영리 (새창열림)

    'IDE & Framework > Android' 카테고리의 다른 글

    AAC MVVM - (1)Live Data  (0) 2021.10.17
    View binding 사용해보기  (0) 2021.10.17
    [Android] SHA-1 쉽게 찾는법  (0) 2021.10.17
    Android에서 SQLite 사용하기 (feat.ROOM)  (0) 2021.07.30
    AsyncTask는 왜 deprecated 되었을까?  (0) 2021.07.09
      'IDE & Framework/Android' 카테고리의 다른 글
      • AAC MVVM - (1)Live Data
      • View binding 사용해보기
      • [Android] SHA-1 쉽게 찾는법
      • Android에서 SQLite 사용하기 (feat.ROOM)
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바