Kotlin을 사용하여 Android에서 Refught2를 통해 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"
}
상술한 의존 관계에 근거하여 우리는 사용할 수 있을 것이다사용법
라이센스 선언
모듈
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
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())
})
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을 사용했습니다.만약 당신이 그것들을 모른다면, 그것들의 작업 원리를 빨리 이해하고 싶다면, 이 두 가지 주제에 관한 나의 글을 보십시오.
Kotlin을 사용하여 안드로이드에서 ViewModel 사용
아유시 쿠프타・ 1월 28~21일・ 3분 읽기
#kotlin
#android
Kotlin을 사용하여 안드로이드에서 ViewBinding 사용
아유시 쿠프타・ 1월 28~21일・ 3분 읽기
#kotlin
#android
신용:
namespaceit.com 표지 이미지용
Reference
이 문제에 관하여(Kotlin을 사용하여 Android에서 Refught2를 통해 GET 요청), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theimpulson/making-get-requests-with-retrofit2-on-android-using-kotlin-4e4c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)