728x90
반응형
plugins {
id("com.android.application") version "8.1.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.10.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
// NLog
implementation("com.github.b3lon9:NLog:1.0.8")
// retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
}
Retrofit에 사용될 서비스
서버에 설정된 메서드를 연결 해주는 것
Annotation이 일치해야 함
interface GitHubService {
// https://jsonplaceholder.typicode.com/posts/{userId}
// textId가 아닌 Path로 설정한 userId 입력
@GET("posts/{userId}")
fun getData(@Path("userId") textId: String): Call<PostsData>
// https://jsonplaceholder.typicode.com/posts?{userId}=1
// https://jsonplaceholder.typicode.com/posts?userId=1
@GET("posts")
fun getDataQuery(@Query("userId") textId: String): Call<List<PostsData>>
@FormUrlEncoded
@POST("posts")
fun postData(@FieldMap param: HashMap<String, Any>): Call<PostsData>
@PUT("posts/{userId}")
fun putData(@Path("userId") userId: String): Call<PostsData>
@GET("hello-spring")
fun getHelloSpring(@Query("name") name: String): Call<ResponseBody>
}
연습용 데이터 클래스
data class PostsData(
val userId: Int,
val id: Int,
val title: String,
val body: String
)
사용
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
NLog.i("onCreate..")
val client = OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build()
val retrofit = Retrofit.Builder()
.baseUrl(Constants.PracticeURL.BASE_URL_LOCAL)
.client(client)
.build()
val githubService = retrofit.create(GitHubService::class.java)
githubService.getHelloSpring("neander").enqueue(object: Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
NLog.d("onResponse.. call:$call.. response:$response")
val body = response.body()
NLog.w("neander", "body ...." + body?.string()+ "...middle check..." + response)
}
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
NLog.e("onFailure.. call:$call.. error:${t.stackTraceToString()}")
}
})
}
Retrofit을 이용한 함수
private fun getTest(service: GitHubService) {
service.getData("1").enqueue(object: Callback<PostsData> {
override fun onResponse(call: Call<PostsData>, response: Response<PostsData>) {
NLog.d("onResponse.. response:$response")
NLog.d("onResponse.. response:${response.body()}")
val data: PostsData? = response.body()
data?.let {
NLog.d("data:$data")
}
}
override fun onFailure(call: Call<PostsData>, t: Throwable) {
NLog.e("onFailure1.. call:$call")
NLog.e("onFailure2.. error:${t.stackTraceToString()}")
}
})
}
private fun getQueryTest(service: GitHubService) {
service.getDataQuery("2").enqueue(object: Callback<List<PostsData>> {
override fun onResponse(
call: Call<List<PostsData>>,
response: Response<List<PostsData>>
) {
NLog.d("onResponse.. response:$response")
if (response.isSuccessful) {
val datas: List<PostsData>? = response.body()
datas?.let {
NLog.d("size:${datas.size}")
NLog.d("datas:$datas")
}
} else {
}
}
override fun onFailure(call: Call<List<PostsData>>, t: Throwable) {
NLog.e("onFailure.. error:${t.stackTraceToString()}")
}
})
}
예제용 서버
object Constants {
object PracticeURL {
const val BASE_URL_1 = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/"
const val BASE_URL_2 = "https://jsonplaceholder.typicode.com/"
const val BASE_URL_LOCAL = "http://192.1.40.86:8033/"
// const val BASE_URL_LOCAL = "http://10.0.2.2:8033/"
}
}
728x90
반응형
'dev > aos' 카테고리의 다른 글
[AOS] Android Studio Alt + F12 not work (0) | 2024.01.13 |
---|---|
[AOS] Gradle Plugin, Version location (0) | 2024.01.12 |
[AOS] BuildType, Variant 빌드 (0) | 2024.01.04 |
[AOS] SharedPreference 임시저장 (0) | 2023.12.15 |
[AOS] NumberPicker 선택 (0) | 2023.12.15 |