[kotlin] 안드로이드에서의 코틀린 웹 서비스 호출하기
안드로이드 앱을 개발할 때, 때로는 웹 서비스와의 통신이 필요하다. 이를 위해 안드로이드 앱에서 코틀린을 사용해서 웹 서비스를 호출하는 방법을 알아보자.
1. 네트워크 권한 설정
안드로이드 매니페스트 파일에 네트워크 권한을 추가해야 한다.
<uses-permission android:name="android.permission.INTERNET" />
2. 네트워크 통신 설정
AndroidManifest.xml
에 네트워크 권한을 추가했다면, 앱에서 네트워크 통신을 위해 HttpURLConnection
이나 Retrofit
과 같은 라이브러리를 사용할 수 있다.
2.1 HttpURLConnection을 사용한 예제
import java.net.HttpURLConnection
import java.net.URL
val url = URL("https://api.example.com/data")
val connection = url.openConnection() as HttpURLConnection
connection.requestMethod = "GET"
val responseCode = connection.responseCode
if (responseCode == HttpURLConnection.HTTP_OK) {
val inputStream = connection.inputStream
// 응답을 처리하는 코드
} else {
// 오류 처리 코드
}
connection.disconnect()
2.2 Retrofit을 사용한 예제
Retrofit은 네트워크 통신을 간편하게 처리할 수 있는 라이브러리다. 먼저 build.gradle
에 Retrofit 라이브러리를 추가해야 한다.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
interface ApiService {
@GET("data")
fun getData(): Call<Data>
}
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val apiService = retrofit.create(ApiService::class.java)
val call = apiService.getData()
call.enqueue(object : Callback<Data> {
override fun onResponse(call: Call<Data>, response: Response<Data>) {
// 응답을 처리하는 코드
}
override fun onFailure(call: Call<Data>, t: Throwable) {
// 오류 처리 코드
}
})
3. 스레드 처리
네트워크 통신은 메인 스레드에서 수행해서는 안된다. 안드로이드에서는 네트워크 통신을 백그라운드 스레드에서 처리해야 한다.
3.1 AsyncTask를 사용한 예제
class NetworkTask : AsyncTask<URL, Void, String>() {
override fun doInBackground(vararg urls: URL): String {
val url = urls[0]
val connection = url.openConnection() as HttpURLConnection
// 네트워크 요청 코드
return response
}
override fun onPostExecute(result: String) {
// 결과 처리 코드
}
}
val url = URL("https://api.example.com/data")
val networkTask = NetworkTask()
networkTask.execute(url)
안드로이드에서 코틀린을 사용해 웹 서비스를 호출하는 간단한 예제를 살펴보았다. 네트워크 통신은 사용자 경험에 영향을 미칠 수 있는 중요한 요소이므로 안정성을 고려하여 적절히 처리해야 한다.