Kotlin을 사용하여 Android에서 Refught2를 통해 GET 요청

9776 단어 androidkotlin
Retrofit는 안드로이드에서 가장 많이 사용되는 보안 HTTP 라이브러리입니다.우리는 그것을 사용하여 각종 사이트와 서버가 제공하는 RESTAPI를 처리할 수 있다.이 문서에서는 Reformation을 사용하여 간단한 GET 요청을 생성하는 방법을 보여 드리겠습니다.

대상 서버


REST API 요청에는 무료 서비스JSONPlaceholder를 사용합니다.구체적인 목표는 다음과 같습니다.

  • /posts/1 응답으로 JSON 객체 1개
  • 제공

  • /posts/는 100개의 JSON 대상을 포함하는 그룹을 응답으로 제공
  • 의존 관계


    안드로이드 시스템 개선, 협동 프로그램, 생명주기 라이브러리에 대한 의존도를 추가합니다.
    dependencies {
        // Retrofit
        def retrofit_version = "2.9.0"
        implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
        implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
    
        // Coroutines
        def coroutines_version = "1.4.2"
        implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
        implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
    
        // Lifecycle
        def lifecycle_version = "2.2.0"
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
    }
    
    상술한 의존 관계에 근거하여 우리는 사용할 수 있을 것이다
  • 요청을 위해 개조
  • GSON은 JSON을 Kotlin으로 전환하고 그 반대로
  • 단독 라인에서 요청한 협동 루트
  • ViewModel은 우리가 얻은 데이터를 저장하고
  • 저장된 데이터의 실시간 데이터 관찰
  • 사용법


    라이센스 선언


    모듈AndroidManifest.xml에서 응용 프로그램에서 인터넷을 사용할 수 있음을 성명합니다.
    <uses-permission android:name="android.permission.INTERNET"/>
    

    네트워크 구현


    우리는 개조에 관한 모든 과정을 network라는 새 소프트웨어 패키지에 저장할 것이다.패키지는 다음 세 개의 파일을 호스팅합니다.
  • User.kt-레벨
  • UserAPI.kt - 커넥터
  • UserNetwork.kt - 객체
  • 이제 이런 것들을 계속 실현합시다.

    이용자


    이 클래스에는 API에서 제공하는 응답 객체와 같은 4개의 매개 변수가 포함된 User라는 데이터 클래스가 포함됩니다.
    다음은 User.kt 내 사례의 표현입니다.
    package dev.theimpulson.retrofitexample.network
    
    data class User(
        val body: String,
        val id: Int,
        val title: String,
        val userId: Int
    )
    

    사용자 API


    UseraPI는 인터페이스가 됩니다.이것은 JSON 응답을 실제로 얻기 위한 GET 방법을 호스팅합니다.@GET 주석이 있는 2개의 마운트 함수와 응답을 설명합니다.이 주석들은 요청한 경로를 불러옵니다.이 함수 suspend 를 만들면 협동 루트 범위에서만 실행할 수 있도록 합니다.
    다음은 UserAPI.kt 내 사례의 표현입니다.
    package dev.theimpulson.retrofitexample.network
    
    import retrofit2.http.GET
    
    interface UserAPI {
    
        @GET("posts/1")
        suspend fun getPost(): User
    
        @GET("posts")
        suspend fun getPosts(): List<User>
    }
    

    사용자 네트워크


    UserNetwork는 단일 인스턴스가 되도록 객체가 됩니다.이것은 우리의 개조 생성기 방법을 위탁하여 개조를 초기화할 것이다.
    초기화를 지연시킬 변수를 설명합니다.이것은 Retrofit.Builder() 종류를 초기화할 것이다.우리는 다음과 같이 호소할 것이다.
  • .baseUrl("https://jsonplaceholder.typicode.com")baseurl을 설명하는 방법
  • .addConverterFactory(GsonConverterFactory.create()) JSON을 Kotlin 변환기로 변환하고 그 반대로
  • .build() 구축 대상 및
  • .create(UserAPI::class.java) 우리의 인터페이스 방법을 그것에 전달한다.
  • 다음은 UserNetwork.kt 내 사례의 표현입니다.
    package dev.theimpulson.retrofitexample.network
    
    import retrofit2.Retrofit
    import retrofit2.converter.gson.GsonConverterFactory
    
    object UserNetwork {
    
        val retrofit by lazy {
            Retrofit.Builder()
                    .baseUrl("https://jsonplaceholder.typicode.com")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
                    .create(UserAPI::class.java)
        }
    }
    
    이것만 있으면 우리의 네트워크 패키지가 완성된다.이제 GET 요청을 실행하여 대상 서버에서 JSON 응답을 받을 수 있습니다.

    ViewModel 구현


    ViewModel 라이브러리로 확장할 새 클래스를 만듭니다.이 클래스는 두 개의 변수를 포함하여 얻은 응답을 저장하고,viewModelScope에서 마운트 함수를 각각 호출합니다.
    변수는 val로 사용자에 대한 MutableLiveData 유형이 있고 MutableLiveData 클래스가 초기화됩니다.
    이 함수들은viewModelScope에서 시작된 UserAPI 의 마운트 함수를 서버에서 제공하는 응답으로 위에서 만든 변수의 값을 업데이트합니다.
    내 경우, 나는 그것을 MainActivityViewModel 라고 명명할 것이다.그 모양은 다음과 같습니다.
    package dev.theimpulson.retrofitexample
    
    import androidx.lifecycle.MutableLiveData
    import androidx.lifecycle.ViewModel
    import androidx.lifecycle.viewModelScope
    import dev.theimpulson.retrofitexample.network.User
    import dev.theimpulson.retrofitexample.network.UserNetwork
    import kotlinx.coroutines.launch
    
    class MainActivityViewModel : ViewModel() {
    
        val myResponse: MutableLiveData<User> = MutableLiveData()
        val myResponseList: MutableLiveData<List<User>> = MutableLiveData()
    
        fun getPost() {
            viewModelScope.launch {
                myResponse.value = UserNetwork.retrofit.getPost()
            }
        }
    
        fun getPosts() {
            viewModelScope.launch {
                myResponseList.value = UserNetwork.retrofit.getPosts()
            }
        }
    }
    

    주요 활동 구현


    현재, 우리 MainActivity 에서, 우리는 이전에 ViewModelProvider 클래스를 사용하여 만든 ViewModel 클래스의 실례를 얻을 것이다.
    val viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
    
    현재, 우리는 앞에서 만든 ViewModel의 두 함수를 호출하여 데이터를 가져와 클래스 변수에 저장하고, 그것들을 LiveData의 observe 방법으로 실현할 것이다. Log
  • 단일 JSON 객체에 대해 첫 번째 함수를 호출하고 그 응답을 기록하여 관찰합니다.
  • viewModel.getPost()
    viewModel.myResponse.observe(this, Observer {
        Log.d(TAG, it.body)
        Log.d(TAG, it.title)
        Log.d(TAG, it.id.toString())
        Log.d(TAG, it.userId.toString())
    })
    
  • 100개의 JSON 객체 목록에 대해 두 번째 함수를 호출하고 그 응답을 기록하여 관찰합니다.응답은 User 개 대상의 목록이기 때문에, 우리는 그것들을 하나하나 Log 각 대상으로 순환할 수 있다.
  • viewModel.getPosts()
    viewModel.myResponseList.observe(this, Observer {
        for (user in it) {
            Log.d(TAG, user.body)
            Log.d(TAG, user.title)
            Log.d(TAG, user.id.toString())
            Log.d(TAG, user.userId.toString())
    }
    
    다음은 MainActivity.kt 내 사례의 표현입니다.
    package dev.theimpulson.retrofitexample
    
    import android.os.Bundle
    import android.util.Log
    import androidx.appcompat.app.AppCompatActivity
    import androidx.lifecycle.Observer
    import androidx.lifecycle.ViewModelProvider
    import dev.theimpulson.retrofitexample.databinding.ActivityMainBinding
    
    class MainActivity : AppCompatActivity() {
    
        private val TAG = "MainActivity"
        private lateinit var binding: ActivityMainBinding
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
    
            val viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
    
            viewModel.getPost()
            viewModel.myResponse.observe(this, Observer {
                Log.d(TAG, it.body)
                Log.d(TAG, it.title)
                Log.d(TAG, it.id.toString())
                Log.d(TAG, it.userId.toString())
            })
    
            viewModel.getPosts()
            viewModel.myResponseList.observe(this, Observer {
                for (user in it) {
                    Log.d(TAG, user.body)
                    Log.d(TAG, user.title)
                    Log.d(TAG, user.id.toString())
                    Log.d(TAG, user.userId.toString())
                }
            })
        }
    }
    
    이것만 있으면 우리의 소프트웨어 패키지는 이미 완성되어 사용할 수 있다.사용자가 선택한 장치에 그것을 구축하고 실행할 수 있으며, 응답이 예상한 대로 기록되었는지 logcat을 관찰할 수 있습니다.
    안드로이드 프로그램에서 REST API를 제공하는 거의 모든 사이트/서버에 GET 요청을 할 수 있도록 수정하고 확장할 수 있어야 한다.

    추가 자원


    위 글에서는 ViewModel과 ViewBinding을 사용했습니다.만약 당신이 그것들을 모른다면, 그것들의 작업 원리를 빨리 이해하고 싶다면, 이 두 가지 주제에 관한 나의 글을 보십시오.




    신용:


  • namespaceit.com 표지 이미지용
  • 좋은 웹페이지 즐겨찾기